blob: c5337d0f122b1e9bb61052a0b6c633434a8abb6c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
// Copyright 2014 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 "content/renderer/android/synchronous_compositor_external_begin_frame_source.h"
#include "cc/output/begin_frame_args.h"
#include "content/renderer/android/synchronous_compositor_registry.h"
namespace content {
SynchronousCompositorExternalBeginFrameSource::
SynchronousCompositorExternalBeginFrameSource(
int routing_id,
SynchronousCompositorRegistry* registry)
: routing_id_(routing_id),
registry_(registry),
registered_(false),
client_(nullptr) {
thread_checker_.DetachFromThread();
}
SynchronousCompositorExternalBeginFrameSource::
~SynchronousCompositorExternalBeginFrameSource() {
DCHECK(CalledOnValidThread());
if (registered_) {
registry_->UnregisterBeginFrameSource(routing_id_, this);
}
DCHECK(!client_);
}
void SynchronousCompositorExternalBeginFrameSource::BeginFrame(
const cc::BeginFrameArgs& args) {
DCHECK(CalledOnValidThread());
CallOnBeginFrame(args);
}
void SynchronousCompositorExternalBeginFrameSource::SetClient(
SynchronousCompositorExternalBeginFrameSourceClient* client) {
DCHECK(CalledOnValidThread());
if (client_ == client)
return;
if (client_)
client_->OnNeedsBeginFramesChange(false);
client_ = client;
if (client_)
client_->OnNeedsBeginFramesChange(needs_begin_frames_);
// State without client is paused, and default client state is not paused.
SetBeginFrameSourcePaused(!client_);
}
void SynchronousCompositorExternalBeginFrameSource::OnNeedsBeginFramesChange(
bool needs_begin_frames) {
DCHECK(CalledOnValidThread());
if (client_)
client_->OnNeedsBeginFramesChange(needs_begin_frames);
}
void SynchronousCompositorExternalBeginFrameSource::SetClientReady() {
DCHECK(CalledOnValidThread());
registry_->RegisterBeginFrameSource(routing_id_, this);
registered_ = true;
}
bool
SynchronousCompositorExternalBeginFrameSource::CalledOnValidThread() const {
return thread_checker_.CalledOnValidThread();
}
} // namespace content
|