Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
dart::ConcurrentMarkTask Class Reference
Inheritance diagram for dart::ConcurrentMarkTask:
dart::ThreadPool::Task dart::IntrusiveDListEntry< Task >

Public Member Functions

 ConcurrentMarkTask (GCMarker *marker, IsolateGroup *isolate_group, PageSpace *page_space, SyncMarkingVisitor *visitor)
 
virtual void Run ()
 
- Public Member Functions inherited from dart::ThreadPool::Task
virtual ~Task ()
 
- Public Member Functions inherited from dart::IntrusiveDListEntry< Task >
 IntrusiveDListEntry ()
 
 ~IntrusiveDListEntry ()
 

Additional Inherited Members

- Protected Member Functions inherited from dart::ThreadPool::Task
 Task ()
 

Detailed Description

Definition at line 879 of file marker.cc.

Constructor & Destructor Documentation

◆ ConcurrentMarkTask()

dart::ConcurrentMarkTask::ConcurrentMarkTask ( GCMarker marker,
IsolateGroup isolate_group,
PageSpace page_space,
SyncMarkingVisitor visitor 
)
inline

Definition at line 881 of file marker.cc.

885 : marker_(marker),
886 isolate_group_(isolate_group),
887 page_space_(page_space),
888 visitor_(visitor) {
889#if defined(DEBUG)
890 MonitorLocker ml(page_space_->tasks_lock());
891 ASSERT(page_space_->phase() == PageSpace::kMarking);
892#endif
893 }
static const char marker[]
Monitor * tasks_lock() const
Definition pages.h:309
Phase phase() const
Definition pages.h:336
#define ASSERT(E)

Member Function Documentation

◆ Run()

virtual void dart::ConcurrentMarkTask::Run ( )
inlinevirtual

Implements dart::ThreadPool::Task.

Definition at line 895 of file marker.cc.

895 {
897 isolate_group_, Thread::kMarkerTask, /*bypass_safepoint=*/true);
898 ASSERT(result);
899 {
902
903 marker_->IterateRoots(visitor_);
904
906 int64_t stop = OS::GetCurrentMonotonicMicros();
907 visitor_->AddMicros(stop - start);
908 if (FLAG_log_marker_tasks) {
909 THR_Print("Task marked %" Pd " bytes in %" Pd64 " micros.\n",
910 visitor_->marked_bytes(), visitor_->marked_micros());
911 }
912 }
913
914 // Exit isolate cleanly *before* notifying it, to avoid shutdown race.
915 Thread::ExitIsolateGroupAsHelper(/*bypass_safepoint=*/true);
916 // This marker task is done. Notify the original isolate.
917 {
918 MonitorLocker ml(page_space_->tasks_lock());
919 page_space_->set_tasks(page_space_->tasks() - 1);
920 page_space_->set_concurrent_marker_tasks(
921 page_space_->concurrent_marker_tasks() - 1);
923 page_space_->concurrent_marker_tasks_active() - 1);
924 ASSERT(page_space_->phase() == PageSpace::kMarking);
925 if (page_space_->concurrent_marker_tasks() == 0) {
928 }
929 ml.NotifyAll();
930 }
931 }
void ScheduleInterrupts(uword interrupt_bits)
Definition isolate.cc:1924
void AddMicros(int64_t micros)
Definition marker.cc:47
uintptr_t marked_bytes() const
Definition marker.cc:45
void DrainMarkingStackWithPauseChecks()
Definition marker.cc:88
int64_t marked_micros() const
Definition marker.cc:46
static int64_t GetCurrentMonotonicMicros()
void set_concurrent_marker_tasks_active(intptr_t val)
Definition pages.h:328
intptr_t concurrent_marker_tasks_active() const
Definition pages.h:324
intptr_t tasks() const
Definition pages.h:310
void set_tasks(intptr_t val)
Definition pages.h:311
void set_concurrent_marker_tasks(intptr_t val)
Definition pages.h:319
@ kAwaitingFinalization
Definition pages.h:133
intptr_t concurrent_marker_tasks() const
Definition pages.h:315
void set_phase(Phase val)
Definition pages.h:337
static Thread * Current()
Definition thread.h:361
static void ExitIsolateGroupAsHelper(bool bypass_safepoint)
Definition thread.cc:494
static bool EnterIsolateGroupAsHelper(IsolateGroup *isolate_group, TaskKind kind, bool bypass_safepoint)
Definition thread.cc:476
#define THR_Print(format,...)
Definition log.h:20
GAsyncResult * result
#define Pd64
Definition globals.h:416
#define Pd
Definition globals.h:408
#define TIMELINE_FUNCTION_GC_DURATION(thread, name)
Definition timeline.h:41

The documentation for this class was generated from the following file: