Skip to content

Commit

Permalink
fix: renderer hang in cc BeginMainFrame (#16946)
Browse files Browse the repository at this point in the history
* chore: re-export chromium patches

this is just git-import-patches && git-export-patches

* fix: renderer hang in cc BeginMainFrame

backports https://chromium-review.googlesource.com/c/chromium/src/+/1419132
  • Loading branch information
nornagon authored and John Kleinschmidt committed Feb 14, 2019
1 parent 415fbfa commit 7a285cd
Show file tree
Hide file tree
Showing 23 changed files with 239 additions and 105 deletions.
1 change: 1 addition & 0 deletions patches/common/chromium/.patches
Expand Up @@ -89,3 +89,4 @@ disable_color_correct_rendering.patch
sqlite_upgrade_from_3_24_to_3_26.patch
sqlite_update_api_3_26.patch
tts.patch
do_not_allow_impl_side_invalidations_until_frame_sink_is_fully_active.patch
4 changes: 2 additions & 2 deletions patches/common/chromium/allow_new_privs.patch
@@ -1,11 +1,11 @@
From 3a68808c9e49e9a249ee9056015e30543747cd00 Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ales Pergl <alpergl@microsoft.com>
Date: Thu, 20 Sep 2018 17:44:49 -0700
Subject: allow_new_privs.patch


diff --git a/base/process/launch.h b/base/process/launch.h
index 7a2def2ef436..50afeaf5553a 100644
index 7a2def2ef4365ee3dba0752fca46a6f7aa33ad81..50afeaf5553a1a4ae14ca30aa95ab65c258a0322 100644
--- a/base/process/launch.h
+++ b/base/process/launch.h
@@ -180,7 +180,7 @@ struct BASE_EXPORT LaunchOptions {
Expand Down
4 changes: 2 additions & 2 deletions patches/common/chromium/boringssl_build_gn.patch
Expand Up @@ -6,10 +6,10 @@ Subject: boringssl BUILD.gn
Build BoringSSL with some extra functions that nodejs needs.

diff --git a/third_party/boringssl/BUILD.gn b/third_party/boringssl/BUILD.gn
index d31a9f29fa9c12e753708b2a1e75c33b70924300..fd45cfcb50fb659ff8d5a07b06aeecc8f0ecd3ee 100644
index d31a9f29fa9c12e753708b2a1e75c33b70924300..12c0a84a39f4707f0120922aa64c813e5b2a7b0c 100644
--- a/third_party/boringssl/BUILD.gn
+++ b/third_party/boringssl/BUILD.gn
@@ -45,6 +45,19 @@ config("no_asm_config") {
@@ -46,6 +46,19 @@ config("no_asm_config") {

all_sources = crypto_sources + ssl_sources
all_headers = crypto_headers + ssl_headers
Expand Down
2 changes: 1 addition & 1 deletion patches/common/chromium/build_gn.patch
Expand Up @@ -27,7 +27,7 @@ index fcc00ee0e49f101cb1b10629747c4c4fa521776d..3232a0360e94e78621f7f672e3de4bdc

if (is_win) {
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 959a59231746..48f1285c4657 100644
index 959a592317462abb07eefbf03853e1610034c5f3..48f1285c465797bfba37cf2a86cfe21d78c533e6 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -634,12 +634,12 @@ config("compiler") {
Expand Down
6 changes: 3 additions & 3 deletions patches/common/chromium/build_toolchain_win_patch.patch
@@ -1,4 +1,4 @@
From 88c91c7f60e6251c35fdb3549a5dd7fc66cfdf3b Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Anonymous <anonymous@electronjs.org>
Date: Wed, 19 Sep 2018 18:55:58 -0700
Subject: build_toolchain_win_patch.patch
Expand All @@ -18,7 +18,7 @@ For example, instead of generating `obj/ui/base/base_cc.pdb` the
build will now generate `obj/ui/base/obj_ui_base_base_cc.pdb`.

diff --git a/build/toolchain/win/BUILD.gn b/build/toolchain/win/BUILD.gn
index eb3e2b2b377d..fdffcdbdbbfe 100644
index eb3e2b2b377dde31e062be46837bf509ecab0325..fdffcdbdbbfe1280f50c5b8401b117e24ea5267f 100644
--- a/build/toolchain/win/BUILD.gn
+++ b/build/toolchain/win/BUILD.gn
@@ -173,6 +173,12 @@ template("msvc_toolchain") {
Expand Down Expand Up @@ -48,7 +48,7 @@ index eb3e2b2b377d..fdffcdbdbbfe 100644

tool("rc") {
diff --git a/build/toolchain/win/tool_wrapper.py b/build/toolchain/win/tool_wrapper.py
index cb0393ecd507..ee21eb4b194b 100644
index cb0393ecd507b865169e9d7c3037d7d5523ae30e..ee21eb4b194b35576883b31c94c9a1f56075e89b 100644
--- a/build/toolchain/win/tool_wrapper.py
+++ b/build/toolchain/win/tool_wrapper.py
@@ -247,6 +247,25 @@ class WinTool(object):
Expand Down
4 changes: 2 additions & 2 deletions patches/common/chromium/desktop_screen_win.patch
@@ -1,11 +1,11 @@
From 0dbac64c4877f7783726d3bc04f332a1491285b7 Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Anonymous <anonymous@electronjs.org>
Date: Thu, 20 Sep 2018 17:45:44 -0700
Subject: desktop_screen_win.patch


diff --git a/ui/views/widget/desktop_aura/desktop_screen_win.cc b/ui/views/widget/desktop_aura/desktop_screen_win.cc
index f772f64d656e..7d13f9f81b6c 100644
index f772f64d656e88cd2631e388f92e00a845f84f16..7d13f9f81b6c4a9b2ac5ce7e54e6a0c58225517c 100644
--- a/ui/views/widget/desktop_aura/desktop_screen_win.cc
+++ b/ui/views/widget/desktop_aura/desktop_screen_win.cc
@@ -32,6 +32,8 @@ display::Display DesktopScreenWin::GetDisplayMatching(
Expand Down
26 changes: 13 additions & 13 deletions patches/common/chromium/disable_color_correct_rendering.patch
Expand Up @@ -19,7 +19,7 @@ to deal with color spaces. That is being tracked at
https://crbug.com/634542 and https://crbug.com/711107.

diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index f51e30c0d2a55f104ca0912e487484102e443c85..fbec9767bdefc3b90335ecc423ffd4ea31bf914d 100644
index 507ece40522fc29a56908d9a6532947a7f67db35..1659c05bfeecbf8ef4264f946aa045d58beb2775 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1578,6 +1578,10 @@ void LayerTreeHostImpl::SetIsLikelyToRequireADraw(
Expand All @@ -34,7 +34,7 @@ index f51e30c0d2a55f104ca0912e487484102e443c85..fbec9767bdefc3b90335ecc423ffd4ea
// The pending tree will have the most recently updated color space, so
// prefer that.
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index e124035096b02e82d526d7dfd0e70d4cf73819be..4f182c826a8d08a8674e3ca2f0bf833aa49a1309 100644
index 736df815a2815484b561bdc4828dbb8592a43d3a..b9b624e475bc244154febb214d88c63aaba5bbab 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -98,6 +98,8 @@ class CC_EXPORT LayerTreeSettings {
Expand All @@ -47,7 +47,7 @@ index e124035096b02e82d526d7dfd0e70d4cf73819be..4f182c826a8d08a8674e3ca2f0bf833a
// Image Decode Service and raster tiles without images until the decode is
// ready.
diff --git a/components/viz/common/display/renderer_settings.h b/components/viz/common/display/renderer_settings.h
index 1327e8607c5192f2440341a33fc210aecd47ced5..543d6937a908560270c6bba431a255436b522608 100644
index 740cb2ab71cfad11f51418f011ad8a68764c51f4..8c882d58a70a8f6c8f5d4ea861a38b24ffdd4573 100644
--- a/components/viz/common/display/renderer_settings.h
+++ b/components/viz/common/display/renderer_settings.h
@@ -18,6 +18,7 @@ class VIZ_COMMON_EXPORT RendererSettings {
Expand Down Expand Up @@ -80,7 +80,7 @@ index eca6020535249e51b428de9dd6454273e6c9dd71..e190d2fb2e2cc41135c119485c2d4475
!command_line->HasSwitch(switches::kUIDisablePartialSwap);
#if defined(OS_WIN)
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
index a9ba5ca388b8d0979a1235a0d976b8cb3277f6d3..574deb6ad7d1b088eea43d87b8fe4637b980139b 100644
index f37adb85d10e344ec9251334b0f46809428cd87a..4d26492492da3ddff0a2529a5e52e5506560a31c 100644
--- a/components/viz/service/display/gl_renderer.cc
+++ b/components/viz/service/display/gl_renderer.cc
@@ -77,6 +77,9 @@
Expand Down Expand Up @@ -237,10 +237,10 @@ index 0544d031b60d38279104a4ca9c6dc25126dea185..1acb3dfa55f39b8ecb9fccaa4627ac25
base::Optional<skia::OpacityFilterCanvas> opacity_canvas;
if (needs_transparency || disable_image_filtering) {
diff --git a/components/viz/service/display/software_renderer.cc b/components/viz/service/display/software_renderer.cc
index 5c41958ed259b1d3ae076312b97a802746897c98..4cb9801a859c12dae03e03073085ff82ea0e4a32 100644
index b72323450524eb53e2ae1938da4e9410d456417f..bba0fd17ac0f95879e77c8112cb8f4da7b49e3ee 100644
--- a/components/viz/service/display/software_renderer.cc
+++ b/components/viz/service/display/software_renderer.cc
@@ -334,9 +334,11 @@ void SoftwareRenderer::DrawPictureQuad(const PictureDrawQuad* quad) {
@@ -333,9 +333,11 @@ void SoftwareRenderer::DrawPictureQuad(const PictureDrawQuad* quad) {

std::unique_ptr<SkCanvas> color_transform_canvas;
// TODO(enne): color transform needs to be replicated in gles2_cmd_decoder
Expand All @@ -256,10 +256,10 @@ index 5c41958ed259b1d3ae076312b97a802746897c98..4cb9801a859c12dae03e03073085ff82
base::Optional<skia::OpacityFilterCanvas> opacity_canvas;
if (needs_transparency || disable_image_filtering) {
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index 9511100e6077b6788abfead4b1962773a22ae40b..db2d8a4fc979b20810776cf2a31018d197cdba7d 100644
index bdecceea7e66605869548efc15181d88cfb8a438..844790266cecd6f7dcfbd4f25e73fc16749f77dd 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -193,6 +193,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus(
@@ -192,6 +192,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus(

// Command-line switches to propagate to the GPU process.
static const char* const kSwitchNames[] = {
Expand All @@ -268,18 +268,18 @@ index 9511100e6077b6788abfead4b1962773a22ae40b..db2d8a4fc979b20810776cf2a31018d1
service_manager::switches::kGpuSandboxAllowSysVShm,
service_manager::switches::kGpuSandboxFailuresFatal,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 1f2897aabf94124f108a0f0449e4d687b084f1a4..4f88e4425ceada8af6b412b087ac134572222824 100644
index 05e0ee79e5ada8eee03b2bff9c127b4f11610c17..35fdb9d351db5a6bdaa61742ec49dc75fe70cfa4 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -218,6 +218,7 @@
@@ -213,6 +213,7 @@
#include "ui/base/ui_base_switches.h"
#include "ui/base/ui_base_switches_util.h"
#include "ui/display/display_switches.h"
+#include "ui/gfx/switches.h"
#include "ui/gl/gl_switches.h"
#include "ui/gl/gpu_switching_manager.h"
#include "ui/native_theme/native_theme_features.h"
@@ -2931,6 +2932,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
@@ -2779,6 +2780,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
// Propagate the following switches to the renderer command line (along
// with any associated values) if present in the browser command line.
static const char* const kSwitchNames[] = {
Expand All @@ -288,10 +288,10 @@ index 1f2897aabf94124f108a0f0449e4d687b084f1a4..4f88e4425ceada8af6b412b087ac1345
service_manager::switches::kDisableInProcessStackTraces,
service_manager::switches::kDisableSeccompFilterSandbox,
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 6d0580d5b0b76109bbaf0d058ce4201dc970adf0..f0271310ec6112ca7276c5af13ee6677d393109e 100644
index 560c7caaa74c295a203bfa53c1acc63f1eb4283f..c10f893e1734e59f3102c8d862ccdaca01a3d73f 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -2565,6 +2565,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings(
@@ -2458,6 +2458,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings(
settings.main_frame_before_activation_enabled =
cmd.HasSwitch(cc::switches::kEnableMainFrameBeforeActivation);

Expand Down
6 changes: 3 additions & 3 deletions patches/common/chromium/disable_extensions_gn.patch
@@ -1,12 +1,12 @@
From 790e1e19af133252e95e3a4de8c8e7a3a011bf02 Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: deepak1556 <hop2deep@gmail.com>
Date: Thu, 20 Sep 2018 17:50:48 -0700
Subject: disable_extensions_gn.patch

Fix build files generation when chrome extensions are disabled.

diff --git a/chrome/browser/apps/app_shim/BUILD.gn b/chrome/browser/apps/app_shim/BUILD.gn
index f8a6d1868788..350c3572ec54 100644
index f8a6d1868788d0a984e70b23b6522cf9b74827da..350c3572ec54d85c2195555877d27486a1300273 100644
--- a/chrome/browser/apps/app_shim/BUILD.gn
+++ b/chrome/browser/apps/app_shim/BUILD.gn
@@ -1,6 +1,7 @@
Expand Down Expand Up @@ -46,7 +46,7 @@ index f8a6d1868788..350c3572ec54 100644
+ }
}
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 1b14d628a63b..00401612c191 100644
index 1b14d628a63b90532bf25251d0bec6c3f1c7a723..00401612c191836043eb0343d3ee3d42acbd5ea4 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -2570,7 +2570,10 @@ split_static_library("ui") {
Expand Down
6 changes: 3 additions & 3 deletions patches/common/chromium/disable_scroll_begin_dcheck.patch
@@ -1,4 +1,4 @@
From 56f1078f33969f1d3c097b398a10d251ea774add Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cheng Zhao <zcbenz@gmail.com>
Date: Thu, 20 Sep 2018 17:48:27 -0700
Subject: disable_scroll_begin_dcheck.patch
Expand All @@ -8,7 +8,7 @@ these assertions. I grouped them together since they are all related to the
ScrollBegin event.

diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
index 702915772e4f..71fb66a7401c 100644
index 702915772e4f150b473d3092d5d3a217d0a14602..71fb66a7401c3d46156dbfa7bc443d7e0b6192e1 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -295,7 +295,7 @@ void MouseWheelEventQueue::SendScrollEnd(WebGestureEvent update_event,
Expand All @@ -21,7 +21,7 @@ index 702915772e4f..71fb66a7401c 100644
WebGestureEvent scroll_begin(gesture_update);
scroll_begin.SetType(WebInputEvent::kGestureScrollBegin);
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 28879dc5e9bb..222b5d7e91ec 100644
index 28879dc5e9bb3f391513da6a7ad829244b39799d..222b5d7e91ec07c3a471299a0d33e2c901b582fd 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -1321,8 +1321,8 @@ void RenderWidgetHostImpl::ForwardGestureEventWithLatencyInfo(
Expand Down
@@ -0,0 +1,128 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Sunny Sachanandani <sunnyps@chromium.org>
Date: Fri, 18 Jan 2019 03:51:46 +0000
Subject: Do not allow impl side invalidations until frame sink is fully active

Impl side invalidations can fill up the pipeline blocking main thread
commit, but draw is blocked for the first commit and activation after
a new frame sink is created causing a hang in BeginMainFrame.

In the repro, |has_pending_tree_| and |active_tree_needs_first_draw_|
are both true while |layer_tree_frame_sink_state_| is
WAITING_FOR_COMMIT. This means the first invalidation activated and the
second one created a pending tree, but draw is blocked because the frame
sink hasn't produced first commit and activation. It's also possible
that only one invalidation would trigger this bug because the main
thread commit won't be able to activate and draw would be blocked again.

With this change, impl side invalidations are blocked until the first
commit and activation for a frame sink have gone through.

Reproduced using an internal test page (b/122271331) and verified that
it's fixed. Also verified that included test fails before this change.

Hopefully this fixes all instances of this long standing hang.

Bug: 622080
Change-Id: I4b6835e0487f1e48244f41805e63897c9661e674
Reviewed-on: https://chromium-review.googlesource.com/c/1419132
Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Commit-Queue: Khushal <khushalsagar@chromium.org>
Reviewed-by: Khushal <khushalsagar@chromium.org>
Auto-Submit: Sunny Sachanandani <sunnyps@chromium.org>
Cr-Commit-Position: refs/heads/master@{#623998}

diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index a81baa256eab487995faae4f7242266f4c922190..588aa6b6cac770656384cef86b56d5445644dd48 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -712,8 +712,12 @@ bool SchedulerStateMachine::CouldCreatePendingTree() const {
if (begin_frame_source_paused_)
return false;

- // Don't create a pending tree till a frame sink is initialized.
- if (!HasInitializedLayerTreeFrameSink())
+ // Don't create a pending tree till a frame sink is fully initialized. Check
+ // for the ACTIVE state explicitly instead of calling
+ // HasInitializedLayerTreeFrameSink() because that only checks if frame sink
+ // has been recreated, but doesn't check if we're waiting for first commit or
+ // activation.
+ if (layer_tree_frame_sink_state_ != LayerTreeFrameSinkState::ACTIVE)
return false;

return true;
diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc
index aa742f8a8a2bf98a5d3a810d4164a44772719530..26d3adafda6236aebbfe8686c38bfa4181e9e470 100644
--- a/cc/scheduler/scheduler_state_machine_unittest.cc
+++ b/cc/scheduler/scheduler_state_machine_unittest.cc
@@ -2310,24 +2310,63 @@ TEST(SchedulerStateMachineTest,
SchedulerStateMachine::Action::PERFORM_IMPL_SIDE_INVALIDATION);
}

-TEST(SchedulerStateMachineTest,
- NoImplSideInvalidationWithoutLayerTreeFrameSink) {
+TEST(SchedulerStateMachineTest, NoImplSideInvalidationUntilFrameSinkActive) {
SchedulerSettings settings;
StateMachine state(settings);
- SET_UP_STATE(state);
+ SET_UP_STATE(state)
+
+ // Prefer impl side invalidation over begin main frame.
+ state.set_should_defer_invalidation_for_fast_main_frame(false);

- // Impl-side invalidations should not be triggered till the frame sink is
- // initialized.
state.DidLoseLayerTreeFrameSink();
+
+ // Create new frame sink but don't commit or activate yet.
EXPECT_ACTION_UPDATE_STATE(
SchedulerStateMachine::Action::BEGIN_LAYER_TREE_FRAME_SINK_CREATION);
- EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);

- // No impl-side invalidations should be performed during frame sink creation.
+ state.DidCreateAndInitializeLayerTreeFrameSink();
+ state.SetNeedsBeginMainFrame();
+
bool needs_first_draw_on_activation = true;
state.SetNeedsImplSideInvalidation(needs_first_draw_on_activation);
+
+ state.IssueNextBeginImplFrame();
+ EXPECT_ACTION_UPDATE_STATE(
+ SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
+ // No impl side invalidation because we're still waiting for first commit.
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
+
+ state.NotifyBeginMainFrameStarted();
+ state.NotifyReadyToCommit();
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::COMMIT);
+
+ state.OnBeginImplFrameDeadline();
+ state.OnBeginImplFrameIdle();
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
+
+ state.SetNeedsImplSideInvalidation(needs_first_draw_on_activation);
+
state.IssueNextBeginImplFrame();
+ // No impl side invalidation because we're still waiting for first activation.
EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::NONE);
+
+ state.NotifyReadyToActivate();
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::ACTIVATE_SYNC_TREE);
+
+ state.OnBeginImplFrameDeadline();
+ EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::Action::DRAW_IF_POSSIBLE);
+ state.OnBeginImplFrameIdle();
+
+ state.SetNeedsBeginMainFrame();
+ state.SetNeedsImplSideInvalidation(needs_first_draw_on_activation);
+
+ state.IssueNextBeginImplFrame();
+ EXPECT_ACTION_UPDATE_STATE(
+ SchedulerStateMachine::Action::SEND_BEGIN_MAIN_FRAME);
+ // Impl side invalidation only after receiving first commit and activation for
+ // new frame sink.
+ EXPECT_ACTION_UPDATE_STATE(
+ SchedulerStateMachine::Action::PERFORM_IMPL_SIDE_INVALIDATION);
}

TEST(SchedulerStateMachineTest, ImplSideInvalidationWhenPendingTreeExists) {

0 comments on commit 7a285cd

Please sign in to comment.