javascript_environment.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright (c) 2013 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
  5. #define ELECTRON_SHELL_BROWSER_JAVASCRIPT_ENVIRONMENT_H_
  6. #include <memory>
  7. #include "base/memory/raw_ptr.h"
  8. #include "gin/public/isolate_holder.h"
  9. #include "uv.h" // NOLINT(build/include_directory)
  10. #include "v8/include/v8-locker.h"
  11. namespace node {
  12. class Environment;
  13. class MultiIsolatePlatform;
  14. } // namespace node
  15. namespace electron {
  16. class MicrotasksRunner;
  17. // Manage the V8 isolate and context automatically.
  18. class JavascriptEnvironment {
  19. public:
  20. JavascriptEnvironment(uv_loop_t* event_loop,
  21. bool setup_wasm_streaming = false);
  22. ~JavascriptEnvironment();
  23. // disable copy
  24. JavascriptEnvironment(const JavascriptEnvironment&) = delete;
  25. JavascriptEnvironment& operator=(const JavascriptEnvironment&) = delete;
  26. void CreateMicrotasksRunner();
  27. void DestroyMicrotasksRunner();
  28. node::MultiIsolatePlatform* platform() const { return platform_.get(); }
  29. v8::Isolate* isolate() const { return isolate_; }
  30. size_t max_young_generation_size_in_bytes() const {
  31. return max_young_generation_size_;
  32. }
  33. static v8::Isolate* GetIsolate();
  34. private:
  35. v8::Isolate* Initialize(uv_loop_t* event_loop, bool setup_wasm_streaming);
  36. std::unique_ptr<node::MultiIsolatePlatform> platform_;
  37. size_t max_young_generation_size_ = 0;
  38. gin::IsolateHolder isolate_holder_;
  39. // owned-by: isolate_holder_
  40. const raw_ptr<v8::Isolate> isolate_;
  41. // depends-on: isolate_
  42. const v8::Locker locker_;
  43. std::unique_ptr<MicrotasksRunner> microtasks_runner_;
  44. };
  45. } // namespace electron
  46. #endif // ELECTRON_SHELL_BROWSER_JAVASCRIPT_ENVIRONMENT_H_