Changeset 5217
- Timestamp:
- 02/04/08 10:55:46 (5 months ago)
- Files:
-
- Tuna/trunk/English.lproj/Profiler.nib/classes.nib (modified) (1 diff)
- Tuna/trunk/English.lproj/Profiler.nib/info.nib (modified) (1 diff)
- Tuna/trunk/English.lproj/Profiler.nib/keyedobjects.nib (modified) (previous)
- Tuna/trunk/TNMainController.m (modified) (2 diffs)
- Tuna/trunk/TNNode.m (modified) (2 diffs)
- Tuna/trunk/TNProfilerController.m (modified) (6 diffs)
- Tuna/trunk/TNSessionController.m (modified) (19 diffs)
- Tuna/trunk/TNTree.m (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Tuna/trunk/English.lproj/Profiler.nib/classes.nib
r3409 r5217 1 { 2 IBClasses = ( 3 {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 4 { 5 ACTIONS = {cancel = id; launch = id; set = id; }; 6 CLASS = TNProfilerController; 7 LANGUAGE = ObjC; 8 OUTLETS = { 9 "_argumentsComboBox" = NSComboBox; 10 "_launchButton" = NSButton; 11 "_progressIndicator" = NSProgressIndicator; 12 "_scriptComboBox" = NSComboBox; 13 "_setButton" = NSButton; 14 }; 15 SUPERCLASS = WIWindowController; 16 }, 17 { 18 CLASS = WIWindowController; 19 LANGUAGE = ObjC; 20 SUPERCLASS = NSWindowController; 21 } 22 ); 23 IBVersion = 1; 24 } 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 <plist version="1.0"> 4 <dict> 5 <key>IBClasses</key> 6 <array> 7 <dict> 8 <key>CLASS</key> 9 <string>FirstResponder</string> 10 <key>LANGUAGE</key> 11 <string>ObjC</string> 12 <key>SUPERCLASS</key> 13 <string>NSObject</string> 14 </dict> 15 <dict> 16 <key>CLASS</key> 17 <string>WIWindowController</string> 18 <key>LANGUAGE</key> 19 <string>ObjC</string> 20 <key>SUPERCLASS</key> 21 <string>NSWindowController</string> 22 </dict> 23 <dict> 24 <key>ACTIONS</key> 25 <dict> 26 <key>cancel</key> 27 <string>id</string> 28 <key>launch</key> 29 <string>id</string> 30 <key>set</key> 31 <string>id</string> 32 </dict> 33 <key>CLASS</key> 34 <string>TNProfilerController</string> 35 <key>LANGUAGE</key> 36 <string>ObjC</string> 37 <key>OUTLETS</key> 38 <dict> 39 <key>_argumentsComboBox</key> 40 <string>NSComboBox</string> 41 <key>_launchButton</key> 42 <string>NSButton</string> 43 <key>_progressIndicator</key> 44 <string>NSProgressIndicator</string> 45 <key>_scriptComboBox</key> 46 <string>NSComboBox</string> 47 <key>_setButton</key> 48 <string>NSButton</string> 49 </dict> 50 <key>SUPERCLASS</key> 51 <string>WIWindowController</string> 52 </dict> 53 </array> 54 <key>IBVersion</key> 55 <string>1</string> 56 </dict> 57 </plist> Tuna/trunk/English.lproj/Profiler.nib/info.nib
r3409 r5217 1 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 3 <plist version="1.0"> 4 4 <dict> 5 <key>IBDocumentLocation</key>6 <string>69 53 356 240 0 0 1280 1002 </string>7 5 <key>IBFramework Version</key> 8 <string>443.0</string> 6 <string>629</string> 7 <key>IBLastKnownRelativeProjectPath</key> 8 <string>../../Tuna.xcodeproj</string> 9 <key>IBOldestOS</key> 10 <integer>5</integer> 9 11 <key>IBOpenObjects</key> 10 <array> 11 <integer>5</integer> 12 </array> 12 <array/> 13 13 <key>IBSystem Version</key> 14 <string>8F46</string> 14 <string>9B18</string> 15 <key>targetFramework</key> 16 <string>IBCocoaFramework</string> 15 17 </dict> 16 18 </plist> Tuna/trunk/TNMainController.m
r5208 r5217 53 53 controller = [[TNProfilerController alloc] init]; 54 54 [controller showWindow:self]; 55 [controller release]; 55 56 } 56 57 … … 95 96 controller = [[TNProfilerController alloc] init]; 96 97 [controller showWindow:self]; 98 [controller release]; 97 99 98 100 return YES; Tuna/trunk/TNNode.m
r5215 r5217 40 40 41 41 42 @implementation TNNode(Private) 43 44 @end 45 46 47 42 48 @implementation TNNode 43 49 … … 493 499 494 500 501 @implementation TNPerlNode(Private) 502 503 @end 504 505 506 495 507 @implementation TNPerlNode 496 508 Tuna/trunk/TNProfilerController.m
r4995 r5217 34 34 @interface TNProfilerController(Private) 35 35 36 - (void) updateButtons;37 - (void) success;38 - (void) error;36 - (void)_updateButtons; 37 - (void)_success; 38 - (void)_error; 39 39 40 40 @end 41 41 42 42 43 44 @implementation TNProfilerController 45 46 - (id)init { 47 self = [super initWithWindowNibName:@"Profiler"]; 48 49 [[NSNotificationCenter defaultCenter] 50 addObserver:self 51 selector:@selector(taskDidTerminate:) 52 name:NSTaskDidTerminateNotification 53 object:NULL]; 54 55 _path = [[NSFileManager temporaryPathWithPrefix:@"Tuna"] retain]; 56 [[NSFileManager defaultManager] createDirectoryAtPath:_path]; 57 58 return self; 59 } 60 61 62 63 - (void)dealloc { 64 [[NSNotificationCenter defaultCenter] removeObserver:self]; 65 66 [_task release]; 67 [_pipe release]; 68 69 [[NSFileManager defaultManager] removeFileAtPath:_path]; 70 [_path release]; 71 72 [super dealloc]; 73 } 74 75 76 77 #pragma mark - 78 79 - (void)windowDidLoad { 80 [[self window] center]; 81 [self setShouldCascadeWindows:YES]; 82 [self setWindowFrameAutosaveName:@"Profiler"]; 83 84 [_scriptComboBox addItemsWithObjectValues:[TNSettings objectForKey:TNScriptsHistory]]; 85 [_argumentsComboBox addItemsWithObjectValues:[TNSettings objectForKey:TNArgumentsHistory]]; 86 } 87 88 89 90 91 - (void)windowWillClose:(NSNotification *)notification { 92 if(_task) { 93 [_task terminate]; 94 [_task release]; 95 _task = NULL; 96 } 97 98 [self autorelease]; 99 } 100 101 102 103 - (void)taskDidTerminate:(NSNotification *)notification { 104 if([notification object] == _task) { 105 if([_task terminationStatus] == 0) 106 [self success]; 107 else if(_started) 108 [self error]; 109 110 _started = NO; 111 112 [_task release]; 113 _task = NULL; 114 115 [_pipe release]; 116 _pipe = NULL; 117 118 [self updateButtons]; 119 } 120 } 121 122 123 124 - (void)setPanelDidEnd:(NSOpenPanel *)openPanel returnCode:(int)returnCode contextInfo:(void *)contextInfo { 125 if(returnCode == NSOKButton) 126 [_scriptComboBox setStringValue:[[openPanel filename] stringByAbbreviatingWithTildeInPath]]; 127 } 128 129 130 131 #pragma mark - 132 133 - (void)updateButtons { 43 @implementation TNProfilerController(Private) 44 45 - (void)_updateButtons { 134 46 [_scriptComboBox setEnabled:!_started]; 135 47 [_setButton setEnabled:!_started]; … … 147 59 148 60 149 - (void) success {61 - (void)_success { 150 62 TNDocument *document; 151 63 NSMutableArray *scripts, *arguments; … … 203 115 204 116 205 - (void) error {117 - (void)_error { 206 118 NSFileHandle *fileHandle; 207 119 NSData *data; … … 223 135 NSLS(@"Tuna could not profile the script, because of Perl errors:\n\n%@", @"Error dialog description (errors)"), 224 136 string); 137 } 138 139 @end 140 141 142 143 @implementation TNProfilerController 144 145 - (id)init { 146 self = [super initWithWindowNibName:@"Profiler"]; 147 148 [[NSNotificationCenter defaultCenter] 149 addObserver:self 150 selector:@selector(taskDidTerminate:) 151 name:NSTaskDidTerminateNotification 152 object:NULL]; 153 154 _path = [[NSFileManager temporaryPathWithPrefix:@"Tuna"] retain]; 155 [[NSFileManager defaultManager] createDirectoryAtPath:_path]; 156 157 [self retain]; 158 159 return self; 160 } 161 162 163 164 - (void)dealloc { 165 [[NSNotificationCenter defaultCenter] removeObserver:self]; 166 167 [_task release]; 168 [_pipe release]; 169 170 [[NSFileManager defaultManager] removeFileAtPath:_path]; 171 [_path release]; 172 173 [super dealloc]; 174 } 175 176 177 178 #pragma mark - 179 180 - (void)windowDidLoad { 181 [[self window] center]; 182 [self setShouldCascadeWindows:YES]; 183 [self setWindowFrameAutosaveName:@"Profiler"]; 184 185 [_scriptComboBox addItemsWithObjectValues:[TNSettings objectForKey:TNScriptsHistory]]; 186 [_argumentsComboBox addItemsWithObjectValues:[TNSettings objectForKey:TNArgumentsHistory]]; 187 } 188 189 190 191 192 - (void)windowWillClose:(NSNotification *)notification { 193 if(_task) { 194 [_task terminate]; 195 [_task release]; 196 _task = NULL; 197 } 198 199 [self autorelease]; 200 } 201 202 203 204 - (void)taskDidTerminate:(NSNotification *)notification { 205 if([notification object] == _task) { 206 if([_task terminationStatus] == 0) 207 [self _success]; 208 else if(_started) 209 [self _error]; 210 211 _started = NO; 212 213 [_task release]; 214 _task = NULL; 215 216 [_pipe release]; 217 _pipe = NULL; 218 219 [self _updateButtons]; 220 } 221 } 222 223 224 225 - (void)setPanelDidEnd:(NSOpenPanel *)openPanel returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo { 226 if(returnCode == NSOKButton) 227 [_scriptComboBox setStringValue:[[openPanel filename] stringByAbbreviatingWithTildeInPath]]; 225 228 } 226 229 … … 251 254 NSMutableArray *arguments; 252 255 NSArray *components; 253 unsigned inti, count;256 NSUInteger i, count; 254 257 255 258 if(_started) { … … 290 293 _started = !_started; 291 294 292 [self updateButtons];295 [self _updateButtons]; 293 296 } 294 297 Tuna/trunk/TNSessionController.m
r5216 r5217 34 34 @interface TNSessionController(Private) 35 35 36 - (void)updateDataMiningStatus; 37 - (void)selectHeaviestPath; 38 - (void)sortNodes; 39 - (TNNode *)selectedNode; 40 - (NSArray *)selectedNodes; 41 - (NSString *)stringFromTime:(double)time; 36 - (void)_updateDataMiningStatus; 37 - (void)_selectHeaviestPath; 38 - (void)_sortNodes; 39 - (TNNode *)_selectedNode; 40 - (NSArray *)_selectedNodes; 41 - (NSString *)_stringFromTime:(NSTimeInterval)time; 42 43 @end 44 45 46 @implementation TNSessionController(Private) 47 48 - (void)_updateDataMiningStatus { 49 if([_tree canRestoreRootNode]) 50 [_dataMiningTextField setStringValue:NSLS(@"Data Mining Active", "Text field")]; 51 else 52 [_dataMiningTextField setStringValue:@""]; 53 } 54 55 56 57 - (void)_selectHeaviestPath { 58 TNNode *node; 59 double before, after, delta; 60 NSInteger row; 61 62 node = [_tree rootNode]; 63 64 while([node children] > 0) { 65 before = [node cumulativePercent]; 66 node = [node childWithHighestCumulativePercent]; 67 after = [node cumulativePercent]; 68 delta = (before - after) / before; 69 70 if(delta > 0.5) 71 break; 72 73 [_treeOutlineView expandItem:node]; 74 } 75 76 row = [_treeOutlineView rowForItem:node]; 77 78 if(row >= 0) { 79 [_treeOutlineView selectRow:row byExtendingSelection:NO]; 80 [_treeOutlineView scrollRowToVisible:row]; 81 } 82 } 83 84 85 86 - (void)_sortNodes { 87 NSTableColumn *tableColumn;; 88 SEL selector; 89 90 tableColumn = [_treeOutlineView highlightedTableColumn]; 91 selector = @selector(compareSymbol:); 92 93 if(tableColumn == _selfTableColumn) { 94 if(_statsDisplayMode == TNStatsDisplayValue) 95 selector = @selector(compareValue:); 96 else if(_statsDisplayMode == TNStatsDisplayPercent) 97 selector = @selector(comparePercent:); 98 } 99 else if(tableColumn == _totalTableColumn) { 100 if(_statsDisplayMode == TNStatsDisplayValue) 101 selector = @selector(compareCumulativeValue:); 102 else if(_statsDisplayMode == TNStatsDisplayPercent) 103 selector = @selector(compareCumulativePercent:); 104 } 105 else if(tableColumn == _libraryTableColumn) 106 selector = @selector(compareLibrary:); 107 else if(tableColumn == _symbolTableColumn) 108 selector = @selector(compareSymbol:); 109 110 [[_tree rootNode] sortUsingSelector:selector order:[_treeOutlineView sortOrder]]; 111 } 112 113 114 115 - (TNNode *)_selectedNode { 116 NSInteger row; 117 118 row = [_treeOutlineView selectedRow]; 119 120 if(row < 0) 121 return NULL; 122 123 return [_treeOutlineView itemAtRow:row]; 124 } 125 126 127 128 - (NSArray *)_selectedNodes { 129 NSEnumerator *enumerator; 130 NSMutableArray *nodes; 131 NSNumber *row; 132 133 nodes = [NSMutableArray array]; 134 enumerator = [_treeOutlineView selectedRowEnumerator]; 135 136 while((row = [enumerator nextObject])) 137 [nodes addObject:[_treeOutlineView itemAtRow:[row unsignedIntValue]]]; 138 139 return nodes; 140 } 141 142 143 144 - (NSString *)_stringFromTime:(NSTimeInterval)time { 145 NSString *unit; 146 147 unit = @"s"; 148 149 if(time < 0.000001) { 150 time *= 1000000000.0; 151 unit = @"ns"; 152 } 153 else if(time < 0.001) { 154 time *= 1000000.0; 155 unit = [NSSWF:@"%Cs", 0x00B5]; 156 } 157 else if(time < 1.0) { 158 time *= 1000.0; 159 unit = @"ms"; 160 } 161 162 return [NSSWF:@"%.1f %@", time, unit]; 163 } 42 164 43 165 @end … … 87 209 [_perlVersionTextField setStringValue:[_tree version]]; 88 210 [_perlFrequencyTextField setIntValue:[_tree frequency]]; 89 [_perlUserTimeTextField setStringValue:[self stringFromTime:[_tree userTime]]];90 [_perlSystemTimeTextField setStringValue:[self stringFromTime:[_tree systemTime]]];91 [_perlWallclockTimeTextField setStringValue:[self stringFromTime:[_tree wallclockTime]]];211 [_perlUserTimeTextField setStringValue:[self _stringFromTime:[_tree userTime]]]; 212 [_perlSystemTimeTextField setStringValue:[self _stringFromTime:[_tree systemTime]]]; 213 [_perlWallclockTimeTextField setStringValue:[self _stringFromTime:[_tree wallclockTime]]]; 92 214 } else { 93 215 [_treeOutlineView removeTableColumn:_selfTableColumn]; 94 216 } 95 217 96 [self sortNodes];97 [_treeOutlineView reloadData]; 98 [self selectHeaviestPath];99 100 [self updateDataMiningStatus];218 [self _sortNodes]; 219 [_treeOutlineView reloadData]; 220 [self _selectHeaviestPath]; 221 222 [self _updateDataMiningStatus]; 101 223 102 224 [[self window] makeFirstResponder:_treeOutlineView]; … … 105 227 106 228 107 - (void)infoSheetDidEnd:(NSWindow *)sheet returnCode:( int)returnCode contextInfo:(void *)contextInfo {229 - (void)infoSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo { 108 230 [sheet close]; 109 231 } … … 124 246 selector == @selector(focusSymbol:) || 125 247 selector == @selector(focusLibrary:)) { 126 node = [self selectedNode];248 node = [self _selectedNode]; 127 249 128 250 if(node ) { … … 166 288 167 289 168 - (void)updateDataMiningStatus {169 if([_tree canRestoreRootNode])170 [_dataMiningTextField setStringValue:NSLS(@"Data Mining Active", "Text field")];171 else172 [_dataMiningTextField setStringValue:@""];173 }174 175 176 177 - (void)selectHeaviestPath {178 TNNode *node;179 double before, after, delta;180 NSInteger row;181 182 node = [_tree rootNode];183 184 while([node children] > 0) {185 before = [node cumulativePercent];186 node = [node childWithHighestCumulativePercent];187 after = [node cumulativePercent];188 delta = (before - after) / before;189 190 if(delta > 0.5)191 break;192 193 [_treeOutlineView expandItem:node];194 }195 196 row = [_treeOutlineView rowForItem:node];197 198 if(row >= 0) {199 [_treeOutlineView selectRow:row byExtendingSelection:NO];200 [_treeOutlineView scrollRowToVisible:row];201 }202 }203 204 205 206 - (void)sortNodes {207 NSTableColumn *tableColumn;;208 SEL selector;209 210 tableColumn = [_treeOutlineView highlightedTableColumn];211 selector = @selector(compareSymbol:);212 213 if(tableColumn == _selfTableColumn) {214 if(_statsDisplayMode == TNStatsDisplayValue)215 selector = @selector(compareValue:);216 else if(_statsDisplayMode == TNStatsDisplayPercent)217 selector = @selector(comparePercent:);218 }219 else if(tableColumn == _totalTableColumn) {220 if(_statsDisplayMode == TNStatsDisplayValue)221 selector = @selector(compareCumulativeValue:);222 else if(_statsDisplayMode == TNStatsDisplayPercent)223 selector = @selector(compareCumulativePercent:);224 }225 else if(tableColumn == _libraryTableColumn)226 selector = @selector(compareLibrary:);227 else if(tableColumn == _symbolTableColumn)228 selector = @selector(compareSymbol:);229 230 [[_tree rootNode] sortUsingSelector:selector order:[_treeOutlineView sortOrder]];231 }232 233 234 235 - (TNNode *)selectedNode {236 int row;237 238 row = [_treeOutlineView selectedRow];239 240 if(row < 0)241 return NULL;242 243 return [_treeOutlineView itemAtRow:row];244 }245 246 247 248 - (NSArray *)selectedNodes {249 NSEnumerator *enumerator;250 NSMutableArray *nodes;251 NSNumber *row;252 253 nodes = [NSMutableArray array];254 enumerator = [_treeOutlineView selectedRowEnumerator];255 256 while((row = [enumerator nextObject]))257 [nodes addObject:[_treeOutlineView itemAtRow:[row unsignedIntValue]]];258 259 return nodes;260 }261 262 263 264 - (NSString *)stringFromTime:(double)time {265 NSString *unit;266 267 unit = @"s";268 269 if(time < 0.000001) {270 time *= 1000000000.0;271 unit = @"ns";272 }273 else if(time < 0.001) {274 time *= 1000000.0;275 unit = [NSSWF:@"%Cs", 0x00B5];276 }277 else if(time < 1.0) {278 time *= 1000.0;279 unit = @"ms";280 }281 282 return [NSSWF:@"%.1f %@", time, unit];283 }284 285 286 287 290 #pragma mark - 288 291 … … 293 296 NSInteger row; 294 297 295 selectedNode = [self selectedNode];298 selectedNode = [self _selectedNode]; 296 299 node = [[_tree rootNode] nodeMatchingSymbolSubstring:string afterNode:selectedNode]; 297 300 … … 346 349 - (void)removeCallstackWithSymbol:(id)sender { 347 350 TNNode *node, *rootNode; 348 introw;351 NSInteger row; 349 352 350 353 row = [_treeOutlineView selectedRow]; … … 352 355 rootNode = [[_tree rootNode] retain]; 353 356 node = [rootNode copy]; 354 [[self selectedNode] unlink];357 [[self _selectedNode] unlink]; 355 358 [rootNode refreshPercent]; 356 359 [_tree popRootNode]; … … 366 369 [_treeOutlineView selectRow:row > 0 ? row - 1 : 0 byExtendingSelection:NO]; 367 370 368 [_treeOutlineView expandItem:[self selectedNode]];369 } 370 371 [self updateDataMiningStatus];371 [_treeOutlineView expandItem:[self _selectedNode]]; 372 } 373 374 [self _updateDataMiningStatus]; 372 375 } 373 376 … … 378 381 379 382 node = [[TNNode alloc] init]; 380 [node addChild:[self selectedNode]];383 [node addChild:[self _selectedNode]]; 381 384 [node refreshPercent]; 382 385 [_tree pushRootNode:node]; … … 387 390 if([_treeOutlineView numberOfRows] > 0) { 388 391 [_treeOutlineView selectRow:0 byExtendingSelection:NO]; 389 [_treeOutlineView expandItem:[self selectedNode]];390 } 391 392 [self updateDataMiningStatus];392 [_treeOutlineView expandItem:[self _selectedNode]]; 393 } 394 395 [self _updateDataMiningStatus]; 393 396 } 394 397 … … 401 404 NSUInteger i, count; 402 405 403 library = [[[self selectedNode] function] library];406 library = [[[self _selectedNode] function] library]; 404 407 node = [[TNNode alloc] init]; 405 408 nodes = [[_tree rootNode] nodesMatchingLibrary:library]; … … 421 424 if([_treeOutlineView numberOfRows] > 0) { 422 425 [_treeOutlineView selectRow:0 byExtendingSelection:NO]; 423 [_treeOutlineView expandItem:[self selectedNode]];424 } 425 426 [self updateDataMiningStatus];426 [_treeOutlineView expandItem:[self _selectedNode]]; 427 } 428 429 [self _updateDataMiningStatus]; 427 430 } 428 431 … … 438 441 if([_treeOutlineView numberOfRows] > 0) { 439 442 [_treeOutlineView selectRow:0 byExtendingSelection:NO]; 440 [_treeOutlineView expandItem:[self selectedNode]];441 } 442 443 [self updateDataMiningStatus];444 [self selectHeaviestPath];443 [_treeOutlineView expandItem:[self _selectedNode]]; 444 } 445 446 [self _updateDataMiningStatus]; 447 [self _selectHeaviestPath]; 445 448 } 446 449 … … 456 459 if([_treeOutlineView numberOfRows] > 0) { 457 460 [_treeOutlineView selectRow:0 byExtendingSelection:NO]; 458 [_treeOutlineView expandItem:[self selectedNode]];459 } 460 461 [self updateDataMiningStatus];462 [self selectHeaviestPath];461 [_treeOutlineView expandItem:[self _selectedNode]]; 462 } 463 464 [self _updateDataMiningStatus]; 465 [self _selectHeaviestPath]; 463 466 } 464 467 … … 501 504 [_treeOutlineView reloadData]; 502 505 503 [self updateDataMiningStatus];506 [self _updateDataMiningStatus]; 504 507 } 505 508 … … 522 525 #pragma mark - 523 526 524 - ( int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {527 - (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { 525 528 if(!item) 526 529 return [(TNNode *) [_tree rootNode] children]; … … 554 557 : [(TNPerlNode *) node cumulativeTime]; 555 558 556 return [self stringFromTime:time];559 return [self _stringFromTime:time]; 557 560 } else { 558 561 return [NSSWF:@"%u", [node calls]]; … … 611 614 - (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectTableColumn:(NSTableColumn *)tableColumn { 612 615 [_treeOutlineView setHighlightedTableColumn:tableColumn]; 613 [self sortNodes];616 [self _sortNodes]; 614 617 [_treeOutlineView reloadData]; 615 618 Tuna/trunk/TNTree.m
r5206 r5217 47 47 [super dealloc]; 48 48 } 49 50 49 51 50
