Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1566)

Side by Side Diff: content/browser/renderer_host/fullscreen_jank_detector.cc

Issue 2810813004: Hide fullscreen rotation jank (Closed)
Patch Set: Re-add feature flag Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved.
boliu 2017/07/05 17:39:48 no (c)
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/renderer_host/fullscreen_jank_detector.h"
6
7 #include "base/logging.h"
8
9 namespace content {
10
11 void FullscreenJankDetector::OnFullscreenStateChanged(bool is_fullscreen) {
12 web_contents_is_fullscreen_ = is_fullscreen;
13 UpdateFullscreenState();
14 }
15
16 void FullscreenJankDetector::OnPhysicalBackingSizeChanged(gfx::Size size) {
17 view_size_ = size;
18 UpdateFullscreenState();
19 }
20
21 void FullscreenJankDetector::OnFrameMetadataUpdated(bool frame_is_fullscreen,
22 gfx::Size frame_size) {
23 frame_is_fullscreen_ = frame_is_fullscreen;
24 frame_size_ = frame_size;
boliu 2017/07/05 17:39:48 this frame size may not be the "final" size, even
25 UpdateFullscreenState();
26 }
27
28 void FullscreenJankDetector::UpdateFullscreenState() {
29 bool mismatched_fullscreen_states =
30 web_contents_is_fullscreen_ != frame_is_fullscreen_;
31 bool mismatched_sizes = view_size_ != frame_size_;
32
33 switch (state_) {
34 // From kNotFullscreen, we transition to kEnteringFullscreen whenever the
35 // fullscreen state changes.
36 case FullscreenState::kNotFullscreen:
37 if (mismatched_fullscreen_states) {
38 DCHECK(web_contents_is_fullscreen_);
39 state_ = FullscreenState::kEnteringFullscreen;
40 }
41 break;
42 // From kFullscreen, we transition to kExitingFullscreen on a fullscreen
43 // state change, or to kFullscreenRotation if we get a new size.
44 case FullscreenState::kFullscreen:
45 if (mismatched_fullscreen_states) {
46 DCHECK(!web_contents_is_fullscreen_);
47 state_ = FullscreenState::kExitingFullscreen;
48 } else if (mismatched_sizes) {
49 state_ = FullscreenState::kFullscreenRotation;
50 }
51 break;
52 // From any transition state, once we receive a "good" frame we transition
53 // to the proper "good" state.
54 case FullscreenState::kExitingFullscreen:
boliu 2017/07/05 17:39:48 looks like these three states can just be merged?
55 case FullscreenState::kEnteringFullscreen:
56 case FullscreenState::kFullscreenRotation:
57 if (!mismatched_fullscreen_states && !mismatched_sizes) {
58 state_ = web_contents_is_fullscreen_ ? FullscreenState::kFullscreen
59 : FullscreenState::kNotFullscreen;
60 }
61 break;
62 }
63 }
64
65 bool FullscreenJankDetector::IsInFullscreenTransition() const {
66 return (state_ == FullscreenState::kEnteringFullscreen ||
67 state_ == FullscreenState::kExitingFullscreen ||
68 state_ == FullscreenState::kFullscreenRotation);
69 }
70
71 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698