summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/heap/cppgc/test-platform.cc
blob: 5b2139a101a030de29e93e7850aed78e45ed7e20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "test/unittests/heap/cppgc/test-platform.h"

#include "include/libplatform/libplatform.h"
#include "src/base/platform/platform.h"
#include "src/base/platform/time.h"

namespace cppgc {
namespace internal {
namespace testing {

TestPlatform::TestPlatform(
    std::unique_ptr<v8::TracingController> tracing_controller)
    : DefaultPlatform(0 /* thread_pool_size */, IdleTaskSupport::kEnabled,
                      std::move(tracing_controller)) {}

std::unique_ptr<cppgc::JobHandle> TestPlatform::PostJob(
    cppgc::TaskPriority priority, std::unique_ptr<cppgc::JobTask> job_task) {
  if (AreBackgroundTasksDisabled()) return nullptr;
  return v8_platform_->PostJob(priority, std::move(job_task));
}

void TestPlatform::RunAllForegroundTasks() {
  v8::platform::PumpMessageLoop(v8_platform_.get(), kNoIsolate);
  if (GetForegroundTaskRunner()->IdleTasksEnabled()) {
    v8::platform::RunIdleTasks(v8_platform_.get(), kNoIsolate,
                               std::numeric_limits<double>::max());
  }
}

TestPlatform::DisableBackgroundTasksScope::DisableBackgroundTasksScope(
    TestPlatform* platform)
    : platform_(platform) {
  ++platform_->disabled_background_tasks_;
}

TestPlatform::DisableBackgroundTasksScope::~DisableBackgroundTasksScope()
    V8_NOEXCEPT {
  --platform_->disabled_background_tasks_;
}

}  // namespace testing
}  // namespace internal
}  // namespace cppgc