This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.
2021-04-02 02:24:13 +03:00

70 lines
2.1 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <memory>
#include <hermes/hermes.h>
namespace facebook {
namespace hermes {
namespace inspector {
/**
* RuntimeAdapter encapsulates a HermesRuntime object. The underlying Hermes
* runtime object should stay alive for at least as long as the RuntimeAdapter
* is alive.
*/
class RuntimeAdapter {
public:
virtual ~RuntimeAdapter() = 0;
/// getRuntime should return the runtime encapsulated by this adapter.
virtual jsi::Runtime &getRuntime() = 0;
virtual debugger::Debugger &getDebugger() = 0;
/// tickleJs is a method that subclasses can choose to override to make the
/// inspector more responsive. If overridden, it should call the "__tickleJs"
/// function. The call should occur with appropriate locking (e.g. via a
/// thread-safe runtime instance, or by enqueuing the call on to a dedicated
/// JS thread).
///
/// This makes the inspector more responsive because it gives the inspector
/// the ability to force the process to enter the Hermes interpreter loop
/// soon. This is important because the inspector can only do a number of
/// important operations (like manipulating breakpoints) within the context of
/// a Hermes interperter loop.
///
/// The default implementation does nothing.
virtual void tickleJs();
};
/**
* SharedRuntimeAdapter is a simple implementation of RuntimeAdapter that
* uses shared_ptr to hold on to the runtime. It's generally only used in tests,
* since it does not implement tickleJs.
*/
class SharedRuntimeAdapter : public RuntimeAdapter {
public:
SharedRuntimeAdapter(
std::shared_ptr<jsi::Runtime> runtime,
debugger::Debugger &debugger);
virtual ~SharedRuntimeAdapter();
jsi::Runtime &getRuntime() override;
debugger::Debugger &getDebugger() override;
private:
std::shared_ptr<jsi::Runtime> runtime_;
debugger::Debugger &debugger_;
};
} // namespace inspector
} // namespace hermes
} // namespace facebook