1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifndef V8_V8_PLATFORM_H_ 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define V8_V8_PLATFORM_H_ 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 8109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch#include <stddef.h> 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include <stdint.h> 10f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include <memory> 11f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include <string> 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass Isolate; 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch/** 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * A Task represents a unit of work. 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch */ 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass Task { 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 22f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual ~Task() = default; 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual void Run() = 0; 25b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch/** 28f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * An IdleTask represents a unit of work to be performed in idle time. 29f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * The Run method is invoked with an argument that specifies the deadline in 30f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * seconds returned by MonotonicallyIncreasingTime(). 31f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * The idle task is expected to complete by this deadline. 32f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch */ 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass IdleTask { 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 35f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual ~IdleTask() = default; 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual void Run(double deadline_in_seconds) = 0; 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 39f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch/** 40f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * The interface represents complex arguments to trace events. 41f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch */ 42f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass ConvertableToTraceFormat { 43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public: 44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual ~ConvertableToTraceFormat() = default; 45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 46f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch /** 47f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * Append the class info to the provided |out| string. The appended 48f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * data must be a valid JSON object. Strings must be properly quoted, and 49f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * escaped. There is no processing applied to the content after it is 50f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * appended. 51f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch */ 52f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual void AppendAsTraceFormat(std::string* out) const = 0; 53f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}; 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 55b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch/** 56b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * V8 Platform abstraction layer. 57b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * 58b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * The embedder has to provide an implementation of this interface before 59b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * initializing the rest of V8. 60b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch */ 61b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass Platform { 62b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 63b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch /** 64b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * This enum is used to indicate whether a task is potentially long running, 65b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * or causes a long wait. The embedder might want to use this hint to decide 66b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * whether to execute the task on a dedicated thread. 67b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch */ 68b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch enum ExpectedRuntime { 69b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch kShortRunningTask, 70b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch kLongRunningTask 71b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch }; 72b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 73f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual ~Platform() = default; 74b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 75b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch /** 76109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch * Gets the number of threads that are used to execute background tasks. Is 77109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch * used to estimate the number of tasks a work package should be split into. 78109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch * A return value of 0 means that there are no background threads available. 79109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch * Note that a value of 0 won't prohibit V8 from posting tasks using 80109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch * |CallOnBackgroundThread|. 81109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch */ 82109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch virtual size_t NumberOfAvailableBackgroundThreads() { return 0; } 83109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch 84109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch /** 85b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * Schedules a task to be invoked on a background thread. |expected_runtime| 86b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * indicates that the task will run a long time. The Platform implementation 87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * takes ownership of |task|. There is no guarantee about order of execution 88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * of tasks wrt order of scheduling, nor is there a guarantee about the 89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * thread the task will be run on. 90b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch */ 91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual void CallOnBackgroundThread(Task* task, 92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ExpectedRuntime expected_runtime) = 0; 93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 94b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch /** 95b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * Schedules a task to be invoked on a foreground thread wrt a specific 96b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * |isolate|. Tasks posted for the same isolate should be execute in order of 97b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch * scheduling. The definition of "foreground" is opaque to V8. 98b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch */ 99b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch virtual void CallOnForegroundThread(Isolate* isolate, Task* task) = 0; 100958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 101958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier /** 102014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Schedules a task to be invoked on a foreground thread wrt a specific 103014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * |isolate| after the given number of seconds |delay_in_seconds|. 104014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Tasks posted for the same isolate should be execute in order of 105014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * scheduling. The definition of "foreground" is opaque to V8. 106014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch */ 107014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual void CallDelayedOnForegroundThread(Isolate* isolate, Task* task, 108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch double delay_in_seconds) = 0; 109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Schedules a task to be invoked on a foreground thread wrt a specific 112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * |isolate| when the embedder is idle. 113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Requires that SupportsIdleTasks(isolate) is true. 114014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Idle tasks may be reordered relative to other task types and may be 115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * starved for an arbitrarily long time if no idle time is available. 116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * The definition of "foreground" is opaque to V8. 117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch */ 118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual void CallIdleOnForegroundThread(Isolate* isolate, IdleTask* task) { 119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // TODO(ulan): Make this function abstract after V8 roll in Chromium. 120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Returns true if idle tasks are enabled for the given |isolate|. 124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch */ 125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual bool IdleTasksEnabled(Isolate* isolate) { 126014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // TODO(ulan): Make this function abstract after V8 roll in Chromium. 127014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return false; 128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 131958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier * Monotonically increasing time in seconds from an arbitrary fixed point in 132958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier * the past. This function is expected to return at least 133958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier * millisecond-precision values. For this reason, 134958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier * it is recommended that the fixed point be no further in the past than 135958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier * the epoch. 136958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier **/ 137958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier virtual double MonotonicallyIncreasingTime() = 0; 138014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 139014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 140014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Called by TRACE_EVENT* macros, don't call this directly. 141014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * The name parameter is a category group for example: 142014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * TRACE_EVENT0("v8,parse", "V8.Parse") 143014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * The pointer returned points to a value with zero or more of the bits 144014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * defined in CategoryGroupEnabledFlags. 145014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch **/ 146014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual const uint8_t* GetCategoryGroupEnabled(const char* name) { 147014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch static uint8_t no = 0; 148014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return &no; 149014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 150014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 151014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 152014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Gets the category group name of the given category_enabled_flag pointer. 153014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Usually used while serliazing TRACE_EVENTs. 154014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch **/ 155014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual const char* GetCategoryGroupName( 156014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const uint8_t* category_enabled_flag) { 157014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch static const char dummy[] = "dummy"; 158014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return dummy; 159014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 160014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 161014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 162014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Adds a trace event to the platform tracing system. This function call is 163014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * usually the result of a TRACE_* macro from trace_event_common.h when 164014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * tracing and the category of the particular trace are enabled. It is not 165014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * advisable to call this function on its own; it is really only meant to be 166014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * used by the trace macros. The returned handle can be used by 167014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * UpdateTraceEventDuration to update the duration of COMPLETE events. 168014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch */ 169014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual uint64_t AddTraceEvent( 170014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch char phase, const uint8_t* category_enabled_flag, const char* name, 1713b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args, 1723b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch const char** arg_names, const uint8_t* arg_types, 1733b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch const uint64_t* arg_values, unsigned int flags) { 174014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return 0; 175014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 176014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 177014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch /** 178f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * Adds a trace event to the platform tracing system. This function call is 179f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * usually the result of a TRACE_* macro from trace_event_common.h when 180f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * tracing and the category of the particular trace are enabled. It is not 181f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * advisable to call this function on its own; it is really only meant to be 182f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * used by the trace macros. The returned handle can be used by 183f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch * UpdateTraceEventDuration to update the duration of COMPLETE events. 184f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch */ 185f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual uint64_t AddTraceEvent( 186f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch char phase, const uint8_t* category_enabled_flag, const char* name, 187f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args, 188f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const char** arg_names, const uint8_t* arg_types, 189f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const uint64_t* arg_values, 190f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::unique_ptr<ConvertableToTraceFormat>* arg_convertables, 191f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned int flags) { 192f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch return AddTraceEvent(phase, category_enabled_flag, name, scope, id, bind_id, 193f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch num_args, arg_names, arg_types, arg_values, flags); 194f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 195f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 196f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch /** 197014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Sets the duration field of a COMPLETE trace event. It must be called with 198014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * the handle returned from AddTraceEvent(). 199014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch **/ 200014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual void UpdateTraceEventDuration(const uint8_t* category_enabled_flag, 201014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch const char* name, uint64_t handle) {} 202f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 203f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch class TraceStateObserver { 204f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public: 205f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual ~TraceStateObserver() = default; 206f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual void OnTraceEnabled() = 0; 207f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual void OnTraceDisabled() = 0; 208f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch }; 209f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 210f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch /** Adds tracing state change observer. */ 211f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual void AddTraceStateObserver(TraceStateObserver*) {} 212f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 213f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch /** Removes tracing state change observer. */ 214f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch virtual void RemoveTraceStateObserver(TraceStateObserver*) {} 215b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 216b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 217b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace v8 218b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 219b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif // V8_V8_PLATFORM_H_ 220