blob: 80042719f1e9231fc97610b98d231e16a37016e8 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code if governed by a BSD-style license that can be
// found in LICENSE file.
#include "core/testing/sim/SimRequest.h"
#include "core/testing/sim/SimTest.h"
#include "platform/scheduler/child/web_scheduler.h"
#include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h"
#include "platform/testing/UnitTestHelpers.h"
#include "public/platform/Platform.h"
#include "public/platform/WebThread.h"
#include "public/platform/scheduler/renderer/renderer_scheduler.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::ElementsAre;
namespace blink {
class DisableBackgroundThrottlingIsRespectedTest
: public SimTest,
private ScopedTimerThrottlingForBackgroundTabsForTest {
public:
DisableBackgroundThrottlingIsRespectedTest()
: ScopedTimerThrottlingForBackgroundTabsForTest(false) {}
void SetUp() override {
SimTest::SetUp();
}
};
TEST_F(DisableBackgroundThrottlingIsRespectedTest,
DisableBackgroundThrottlingIsRespected) {
SimRequest main_resource("https://example.com/", "text/html");
LoadURL("https://example.com/");
main_resource.Complete(
"(<script>"
" function f(repetitions) {"
" if (repetitions == 0) return;"
" console.log('called f');"
" setTimeout(f, 10, repetitions - 1);"
" }"
" f(5);"
"</script>)");
Platform::Current()
->CurrentThread()
->Scheduler()
->GetRendererSchedulerForTest()
->SetRendererBackgrounded(true);
// Run delayed tasks for 1 second. All tasks should be completed
// with throttling disabled.
testing::RunDelayedTasks(TimeDelta::FromSeconds(1));
EXPECT_THAT(ConsoleMessages(), ElementsAre("called f", "called f", "called f",
"called f", "called f"));
}
class BackgroundRendererThrottlingTest : public SimTest {};
TEST_F(BackgroundRendererThrottlingTest, BackgroundRenderersAreThrottled) {
SimRequest main_resource("https://example.com/", "text/html");
LoadURL("https://example.com/");
main_resource.Complete(
"(<script>"
" function f(repetitions) {"
" if (repetitions == 0) return;"
" console.log('called f');"
" setTimeout(f, 10, repetitions - 1);"
" }"
" setTimeout(f, 10, 3);"
"</script>)");
Platform::Current()
->CurrentThread()
->Scheduler()
->GetRendererSchedulerForTest()
->SetRendererBackgrounded(true);
// Make sure that we run a task once a second.
for (int i = 0; i < 3; ++i) {
testing::RunDelayedTasks(TimeDelta::FromSeconds(1));
EXPECT_THAT(ConsoleMessages(), ElementsAre("called f"));
ConsoleMessages().clear();
}
}
} // namespace blink