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

Side by Side Diff: cc/surfaces/primary_begin_frame_source.cc

Issue 2880023002: cc::SurfaceDependencyTracker should not crash when a Display goes away (Closed)
Patch Set: StrictMock => NiceMock Created 3 years, 7 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 2017 The Chromium Authors. All rights reserved.
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 "cc/surfaces/primary_begin_frame_source.h"
6 #include "cc/surfaces/frame_sink_manager.h"
7
8 namespace cc {
9
10 PrimaryBeginFrameSource::PrimaryBeginFrameSource() = default;
11
12 PrimaryBeginFrameSource::~PrimaryBeginFrameSource() {
13 frame_sink_manager_->RemoveObserver(this);
14 }
15
16 void PrimaryBeginFrameSource::Init(FrameSinkManager* frame_sink_manager) {
17 frame_sink_manager_ = frame_sink_manager;
18 frame_sink_manager_->AddObserver(this);
19 begin_frame_source_ = base::MakeUnique<ExternalBeginFrameSource>(this);
20 primary_begin_frame_source_ =
21 frame_sink_manager_->GetPrimaryBeginFrameSource();
22 }
23
24 void PrimaryBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) {
25 begin_frame_source_->OnBeginFrame(args);
26 last_begin_frame_args_ = args;
27 }
28
29 const BeginFrameArgs& PrimaryBeginFrameSource::LastUsedBeginFrameArgs() const {
30 return last_begin_frame_args_;
31 }
32
33 void PrimaryBeginFrameSource::OnBeginFrameSourcePausedChanged(bool paused) {}
34
35 void PrimaryBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs,
36 const BeginFrameAck& ack) {
37 begin_frame_source_->DidFinishFrame(obs, ack);
38 }
39
40 void PrimaryBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
41 begin_frame_source_->AddObserver(obs);
42 }
43
44 void PrimaryBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
45 begin_frame_source_->RemoveObserver(obs);
46 }
47
48 bool PrimaryBeginFrameSource::IsThrottled() const {
49 return begin_frame_source_->IsThrottled();
50 }
51
52 void PrimaryBeginFrameSource::OnNeedsBeginFrames(bool needs_begin_frames) {
53 if (needs_begin_frames_ == needs_begin_frames)
54 return;
55
56 needs_begin_frames_ = needs_begin_frames;
57
58 if (!primary_begin_frame_source_)
59 return;
60
61 if (needs_begin_frames_)
62 primary_begin_frame_source_->AddObserver(this);
63 else
64 primary_begin_frame_source_->RemoveObserver(this);
65 }
66
67 void PrimaryBeginFrameSource::OnBeginFrameSourceAdded(
68 BeginFrameSource* begin_frame_source) {
69 if (primary_begin_frame_source_)
70 return;
71
72 primary_begin_frame_source_ = begin_frame_source;
73 if (needs_begin_frames_ && primary_begin_frame_source_)
74 primary_begin_frame_source_->AddObserver(this);
75 }
76
77 void PrimaryBeginFrameSource::OnBeginFrameSourceRemoved(
78 BeginFrameSource* begin_frame_source) {
79 if (primary_begin_frame_source_ != begin_frame_source)
80 return;
81
82 if (needs_begin_frames_)
83 primary_begin_frame_source_->RemoveObserver(this);
84
85 primary_begin_frame_source_ =
86 frame_sink_manager_->GetPrimaryBeginFrameSource();
87
88 if (needs_begin_frames_ && primary_begin_frame_source_)
89 primary_begin_frame_source_->AddObserver(this);
90 }
91
92 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698