#ifndef CONTENT_WEB_TEST_RENDERER_GC_CONTROLLER_H_
#define CONTENT_WEB_TEST_RENDERER_GC_CONTROLLER_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "gin/public/wrappable_pointer_tags.h"
#include "gin/wrappable.h"
namespace blink {
class WebLocalFrame;
}
namespace gin {
class Arguments;
}
namespace content {
class GCController : public gin::Wrappable<GCController> {
public:
static constexpr gin::WrapperInfo kWrapperInfo = {{gin::kEmbedderNativeGin},
gin::kGCController};
const gin::WrapperInfo* wrapper_info() const override;
GCController(const GCController&) = delete;
GCController& operator=(const GCController&) = delete;
static void Install(blink::WebLocalFrame* frame);
explicit GCController(blink::WebLocalFrame* frame);
~GCController() override;
private:
static constexpr int kNumberOfGCsForFullCollection = 7;
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
void Collect(const gin::Arguments& args);
void CollectAll(const gin::Arguments& args);
void AsyncCollectAll(const gin::Arguments& args);
void MinorCollect(const gin::Arguments& args);
void AsyncCollectAllWithEmptyStack(
v8::UniquePersistent<v8::Function> callback);
const raw_ptr<blink::WebLocalFrame> frame_;
base::WeakPtrFactory<GCController> weak_ptr_factory_{this};
};
}
#endif