86b4b5345a
With a temporary intermediate step to allow adapting embedders before getting rid of the ExpectedRuntime method altogether. The method is being renamed to CallOnWorkerThread() as an effort to go away from "background" nomenclature for worker threads ("background" usually refers to a priority but worker threads are commonly used for high priority tasks in v8). Other CLs will follow to rename other "background" APIs. Bug: v8:7310 Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: I2fd4eac7458708d4eacb0f4871c982a567a3865e Reviewed-on: https://chromium-review.googlesource.com/941442 Commit-Queue: Gabriel Charette <gab@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#51645}
73 lines
2.0 KiB
C++
73 lines
2.0 KiB
C++
// Copyright 2017 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 "testing/gtest/include/gtest/gtest.h"
|
|
|
|
#include "include/libplatform/libplatform.h"
|
|
#include "include/v8-platform.h"
|
|
#include "include/v8.h"
|
|
#include "src/base/macros.h"
|
|
#include "src/base/platform/semaphore.h"
|
|
#include "src/execution.h"
|
|
#include "src/isolate.h"
|
|
#include "src/v8.h"
|
|
#include "test/unittests/test-utils.h"
|
|
|
|
namespace v8 {
|
|
|
|
typedef TestWithIsolate IsolateTest;
|
|
|
|
namespace {
|
|
|
|
class MemoryPressureTask : public v8::Task {
|
|
public:
|
|
MemoryPressureTask(Isolate* isolate, base::Semaphore* semaphore)
|
|
: isolate_(isolate), semaphore_(semaphore) {}
|
|
~MemoryPressureTask() override = default;
|
|
|
|
// v8::Task implementation.
|
|
void Run() override {
|
|
isolate_->MemoryPressureNotification(MemoryPressureLevel::kCritical);
|
|
semaphore_->Signal();
|
|
}
|
|
|
|
private:
|
|
Isolate* isolate_;
|
|
base::Semaphore* semaphore_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(MemoryPressureTask);
|
|
};
|
|
|
|
} // namespace
|
|
|
|
// Check that triggering a memory pressure notification on the isolate thread
|
|
// doesn't request a GC interrupt.
|
|
TEST_F(IsolateTest, MemoryPressureNotificationForeground) {
|
|
internal::Isolate* i_isolate =
|
|
reinterpret_cast<internal::Isolate*>(isolate());
|
|
|
|
ASSERT_FALSE(i_isolate->stack_guard()->CheckGC());
|
|
isolate()->MemoryPressureNotification(MemoryPressureLevel::kCritical);
|
|
ASSERT_FALSE(i_isolate->stack_guard()->CheckGC());
|
|
}
|
|
|
|
// Check that triggering a memory pressure notification on an background thread
|
|
// requests a GC interrupt.
|
|
TEST_F(IsolateTest, MemoryPressureNotificationBackground) {
|
|
internal::Isolate* i_isolate =
|
|
reinterpret_cast<internal::Isolate*>(isolate());
|
|
|
|
base::Semaphore semaphore(0);
|
|
|
|
internal::V8::GetCurrentPlatform()->CallOnWorkerThread(
|
|
new MemoryPressureTask(isolate(), &semaphore));
|
|
|
|
semaphore.Wait();
|
|
|
|
ASSERT_TRUE(i_isolate->stack_guard()->CheckGC());
|
|
v8::platform::PumpMessageLoop(internal::V8::GetCurrentPlatform(), isolate());
|
|
}
|
|
|
|
} // namespace v8
|