Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: runtime/vm/heap.cc

Issue 1284713003: Refactor VMTagScope to Thread* rather than Isolate*. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/flow_graph_builder.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/heap.h" 5 #include "vm/heap.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "platform/utils.h" 8 #include "platform/utils.h"
9 #include "vm/flags.h" 9 #include "vm/flags.h"
10 #include "vm/isolate.h" 10 #include "vm/isolate.h"
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 return raw_obj; 305 return raw_obj;
306 } 306 }
307 raw_obj = FindObjectInCodeSpace(visitor); 307 raw_obj = FindObjectInCodeSpace(visitor);
308 return raw_obj; 308 return raw_obj;
309 } 309 }
310 310
311 311
312 void Heap::CollectGarbage(Space space, 312 void Heap::CollectGarbage(Space space,
313 ApiCallbacks api_callbacks, 313 ApiCallbacks api_callbacks,
314 GCReason reason) { 314 GCReason reason) {
315 Thread* thread = Thread::Current();
315 TIMERSCOPE(isolate(), time_gc); 316 TIMERSCOPE(isolate(), time_gc);
316 bool invoke_api_callbacks = (api_callbacks == kInvokeApiCallbacks); 317 bool invoke_api_callbacks = (api_callbacks == kInvokeApiCallbacks);
317 switch (space) { 318 switch (space) {
318 case kNew: { 319 case kNew: {
319 VMTagScope tagScope(isolate(), VMTag::kGCNewSpaceTagId); 320 VMTagScope tagScope(thread, VMTag::kGCNewSpaceTagId);
320 TimelineDurationScope tds(isolate(), 321 TimelineDurationScope tds(isolate(),
321 isolate()->GetGCStream(), 322 isolate()->GetGCStream(),
322 "CollectNewGeneration"); 323 "CollectNewGeneration");
323 RecordBeforeGC(kNew, reason); 324 RecordBeforeGC(kNew, reason);
324 UpdateClassHeapStatsBeforeGC(kNew); 325 UpdateClassHeapStatsBeforeGC(kNew);
325 new_space_.Scavenge(invoke_api_callbacks); 326 new_space_.Scavenge(invoke_api_callbacks);
326 isolate()->class_table()->UpdatePromoted(); 327 isolate()->class_table()->UpdatePromoted();
327 UpdatePretenurePolicy(); 328 UpdatePretenurePolicy();
328 RecordAfterGC(); 329 RecordAfterGC();
329 PrintStats(); 330 PrintStats();
330 if (old_space_.NeedsGarbageCollection()) { 331 if (old_space_.NeedsGarbageCollection()) {
331 // Old collections should call the API callbacks. 332 // Old collections should call the API callbacks.
332 CollectGarbage(kOld, kInvokeApiCallbacks, kPromotion); 333 CollectGarbage(kOld, kInvokeApiCallbacks, kPromotion);
333 } 334 }
334 break; 335 break;
335 } 336 }
336 case kOld: 337 case kOld:
337 case kCode: { 338 case kCode: {
338 VMTagScope tagScope(isolate(), VMTag::kGCOldSpaceTagId); 339 VMTagScope tagScope(thread, VMTag::kGCOldSpaceTagId);
339 TimelineDurationScope tds(isolate(), 340 TimelineDurationScope tds(isolate(),
340 isolate()->GetGCStream(), 341 isolate()->GetGCStream(),
341 "CollectOldGeneration"); 342 "CollectOldGeneration");
342 RecordBeforeGC(kOld, reason); 343 RecordBeforeGC(kOld, reason);
343 UpdateClassHeapStatsBeforeGC(kOld); 344 UpdateClassHeapStatsBeforeGC(kOld);
344 old_space_.MarkSweep(invoke_api_callbacks); 345 old_space_.MarkSweep(invoke_api_callbacks);
345 RecordAfterGC(); 346 RecordAfterGC();
346 PrintStats(); 347 PrintStats();
347 break; 348 break;
348 } 349 }
(...skipping 17 matching lines...) Expand all
366 if (space == kOld) { 367 if (space == kOld) {
367 CollectGarbage(space, kInvokeApiCallbacks, kOldSpace); 368 CollectGarbage(space, kInvokeApiCallbacks, kOldSpace);
368 } else { 369 } else {
369 ASSERT(space == kNew); 370 ASSERT(space == kNew);
370 CollectGarbage(space, kInvokeApiCallbacks, kNewSpace); 371 CollectGarbage(space, kInvokeApiCallbacks, kNewSpace);
371 } 372 }
372 } 373 }
373 374
374 375
375 void Heap::CollectAllGarbage() { 376 void Heap::CollectAllGarbage() {
377 Thread* thread = Thread::Current();
376 TIMERSCOPE(isolate(), time_gc); 378 TIMERSCOPE(isolate(), time_gc);
377 { 379 {
378 VMTagScope tagScope(isolate(), VMTag::kGCNewSpaceTagId); 380 VMTagScope tagScope(thread, VMTag::kGCNewSpaceTagId);
379 TimelineDurationScope tds(isolate(), 381 TimelineDurationScope tds(isolate(),
380 isolate()->GetGCStream(), 382 isolate()->GetGCStream(),
381 "CollectNewGeneration"); 383 "CollectNewGeneration");
382 RecordBeforeGC(kNew, kFull); 384 RecordBeforeGC(kNew, kFull);
383 UpdateClassHeapStatsBeforeGC(kNew); 385 UpdateClassHeapStatsBeforeGC(kNew);
384 new_space_.Scavenge(kInvokeApiCallbacks); 386 new_space_.Scavenge(kInvokeApiCallbacks);
385 isolate()->class_table()->UpdatePromoted(); 387 isolate()->class_table()->UpdatePromoted();
386 UpdatePretenurePolicy(); 388 UpdatePretenurePolicy();
387 RecordAfterGC(); 389 RecordAfterGC();
388 PrintStats(); 390 PrintStats();
389 } 391 }
390 { 392 {
391 VMTagScope tagScope(isolate(), VMTag::kGCOldSpaceTagId); 393 VMTagScope tagScope(thread, VMTag::kGCOldSpaceTagId);
392 TimelineDurationScope tds(isolate(), 394 TimelineDurationScope tds(isolate(),
393 isolate()->GetGCStream(), 395 isolate()->GetGCStream(),
394 "CollectOldGeneration"); 396 "CollectOldGeneration");
395 RecordBeforeGC(kOld, kFull); 397 RecordBeforeGC(kOld, kFull);
396 UpdateClassHeapStatsBeforeGC(kOld); 398 UpdateClassHeapStatsBeforeGC(kOld);
397 old_space_.MarkSweep(kInvokeApiCallbacks); 399 old_space_.MarkSweep(kInvokeApiCallbacks);
398 RecordAfterGC(); 400 RecordAfterGC();
399 PrintStats(); 401 PrintStats();
400 } 402 }
401 } 403 }
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 heap->DisableGrowthControl(); 767 heap->DisableGrowthControl();
766 } 768 }
767 769
768 770
769 NoHeapGrowthControlScope::~NoHeapGrowthControlScope() { 771 NoHeapGrowthControlScope::~NoHeapGrowthControlScope() {
770 Heap* heap = reinterpret_cast<Isolate*>(isolate())->heap(); 772 Heap* heap = reinterpret_cast<Isolate*>(isolate())->heap();
771 heap->SetGrowthControlState(current_growth_controller_state_); 773 heap->SetGrowthControlState(current_growth_controller_state_);
772 } 774 }
773 775
774 } // namespace dart 776 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_builder.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698