blob: 72c7734f9d55ceb9a95a298f5c0ec66a62ac61e9 [file] [log] [blame]
// Copyright 2018 The Chromium 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 "third_party/blink/renderer/controller/bloated_renderer_detector.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/testing/wtf/scoped_mock_clock.h"
#include "third_party/blink/renderer/platform/wtf/time.h"
namespace blink {
class BloatedRendererDetectorTest : public testing::Test {
public:
static TimeDelta GetMockAfterCooldown() {
return TimeDelta::FromMinutes(
BloatedRendererDetector::kMinimumCooldownInMinutes + 1);
}
static TimeDelta GetMockBeforeCooldown() {
return TimeDelta::FromMinutes(
BloatedRendererDetector::kMinimumCooldownInMinutes - 1);
}
};
TEST_F(BloatedRendererDetectorTest, ForwardToBrowser) {
WTF::ScopedMockClock clock;
clock.Advance(GetMockAfterCooldown());
BloatedRendererDetector detector(TimeTicks{});
EXPECT_EQ(NearV8HeapLimitHandling::kForwardedToBrowser,
detector.OnNearV8HeapLimitOnMainThreadImpl());
}
TEST_F(BloatedRendererDetectorTest, CooldownTime) {
WTF::ScopedMockClock clock;
clock.Advance(GetMockBeforeCooldown());
BloatedRendererDetector detector(TimeTicks{});
EXPECT_EQ(NearV8HeapLimitHandling::kIgnoredDueToCooldownTime,
detector.OnNearV8HeapLimitOnMainThreadImpl());
}
TEST_F(BloatedRendererDetectorTest, MultipleDetections) {
WTF::ScopedMockClock clock;
clock.Advance(GetMockAfterCooldown());
BloatedRendererDetector detector(TimeTicks{});
EXPECT_EQ(NearV8HeapLimitHandling::kForwardedToBrowser,
detector.OnNearV8HeapLimitOnMainThreadImpl());
EXPECT_EQ(NearV8HeapLimitHandling::kIgnoredDueToCooldownTime,
detector.OnNearV8HeapLimitOnMainThreadImpl());
clock.Advance(GetMockAfterCooldown());
EXPECT_EQ(NearV8HeapLimitHandling::kForwardedToBrowser,
detector.OnNearV8HeapLimitOnMainThreadImpl());
}
} // namespace blink