1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_OBJECTS_MICROTASK_H_
6 #define V8_OBJECTS_MICROTASK_H_
7 
8 #include "src/objects.h"
9 
10 // Has to be the last include (doesn't have include guards):
11 #include "src/objects/object-macros.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 // Abstract base class for all microtasks that can be scheduled on the
17 // microtask queue. This class merely serves the purpose of a marker
18 // interface.
19 class Microtask : public Struct {
20  public:
21   // Dispatched behavior.
22   DECL_CAST(Microtask)
23   DECL_VERIFIER(Microtask)
24 
25  private:
26   DISALLOW_IMPLICIT_CONSTRUCTORS(Microtask);
27 };
28 
29 // A CallbackTask is a special Microtask that allows us to schedule
30 // C++ microtask callbacks on the microtask queue. This is heavily
31 // used by Blink for example.
32 class CallbackTask : public Microtask {
33  public:
34   DECL_ACCESSORS(callback, Foreign)
35   DECL_ACCESSORS(data, Foreign)
36 
37   static const int kCallbackOffset = Microtask::kHeaderSize;
38   static const int kDataOffset = kCallbackOffset + kPointerSize;
39   static const int kSize = kDataOffset + kPointerSize;
40 
41   // Dispatched behavior.
42   DECL_CAST(CallbackTask)
43   DECL_PRINTER(CallbackTask)
44   DECL_VERIFIER(CallbackTask)
45 
46  private:
47   DISALLOW_IMPLICIT_CONSTRUCTORS(CallbackTask)
48 };
49 
50 // A CallableTask is a special (internal) Microtask that allows us to
51 // schedule arbitrary callables on the microtask queue. We use this
52 // for various tests of the microtask queue.
53 class CallableTask : public Microtask {
54  public:
55   DECL_ACCESSORS(callable, JSReceiver)
56   DECL_ACCESSORS(context, Context)
57 
58   static const int kCallableOffset = Microtask::kHeaderSize;
59   static const int kContextOffset = kCallableOffset + kPointerSize;
60   static const int kSize = kContextOffset + kPointerSize;
61 
62   // Dispatched behavior.
63   DECL_CAST(CallableTask)
64   DECL_PRINTER(CallableTask)
65   DECL_VERIFIER(CallableTask)
66   void BriefPrintDetails(std::ostream& os);
67 
68  private:
69   DISALLOW_IMPLICIT_CONSTRUCTORS(CallableTask);
70 };
71 
72 }  // namespace internal
73 }  // namespace v8
74 
75 #include "src/objects/object-macros-undef.h"
76 
77 #endif  // V8_OBJECTS_MICROTASK_H_
78