forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocument_transition_request.cc
114 lines (98 loc) · 3.97 KB
/
document_transition_request.cc
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright 2020 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 "cc/document_transition/document_transition_request.h"
#include <memory>
#include <sstream>
#include <utility>
#include "base/callback.h"
#include "base/memory/ptr_util.h"
#include "components/viz/common/quads/compositor_frame_transition_directive.h"
namespace cc {
namespace {
std::string TypeToString(viz::CompositorFrameTransitionDirective::Type type) {
switch (type) {
case viz::CompositorFrameTransitionDirective::Type::kSave:
return "kSave";
case viz::CompositorFrameTransitionDirective::Type::kAnimate:
return "kAnimate";
}
return "<unknown>";
}
std::string EffectToString(
viz::CompositorFrameTransitionDirective::Effect effect) {
switch (effect) {
case viz::CompositorFrameTransitionDirective::Effect::kNone:
return "kNone";
case viz::CompositorFrameTransitionDirective::Effect::kCoverDown:
return "kCoverDown";
case viz::CompositorFrameTransitionDirective::Effect::kCoverLeft:
return "kCoverLeft";
case viz::CompositorFrameTransitionDirective::Effect::kCoverRight:
return "kCoverRight";
case viz::CompositorFrameTransitionDirective::Effect::kCoverUp:
return "kCoverUp";
case viz::CompositorFrameTransitionDirective::Effect::kExplode:
return "kExplode";
case viz::CompositorFrameTransitionDirective::Effect::kFade:
return "kFade";
case viz::CompositorFrameTransitionDirective::Effect::kImplode:
return "kImplode";
case viz::CompositorFrameTransitionDirective::Effect::kRevealDown:
return "kRevealDown";
case viz::CompositorFrameTransitionDirective::Effect::kRevealLeft:
return "kRevealLeft";
case viz::CompositorFrameTransitionDirective::Effect::kRevealRight:
return "kRevealRight";
case viz::CompositorFrameTransitionDirective::Effect::kRevealUp:
return "kRevealUp";
}
return "<unknown>";
}
} // namespace
uint32_t DocumentTransitionRequest::s_next_sequence_id_ = 1;
// static
std::unique_ptr<DocumentTransitionRequest>
DocumentTransitionRequest::CreatePrepare(Effect effect,
base::TimeDelta duration,
base::OnceClosure commit_callback) {
return base::WrapUnique(new DocumentTransitionRequest(
effect, duration, std::move(commit_callback)));
}
// static
std::unique_ptr<DocumentTransitionRequest>
DocumentTransitionRequest::CreateStart(base::OnceClosure commit_callback) {
return base::WrapUnique(
new DocumentTransitionRequest(std::move(commit_callback)));
}
DocumentTransitionRequest::DocumentTransitionRequest(
Effect effect,
base::TimeDelta duration,
base::OnceClosure commit_callback)
: type_(Type::kSave),
effect_(effect),
duration_(duration),
commit_callback_(std::move(commit_callback)) {}
DocumentTransitionRequest::DocumentTransitionRequest(
base::OnceClosure commit_callback)
: type_(Type::kAnimate), commit_callback_(std::move(commit_callback)) {}
DocumentTransitionRequest::~DocumentTransitionRequest() = default;
viz::CompositorFrameTransitionDirective
DocumentTransitionRequest::ConstructDirective() const {
// Note that the clamped_duration is also verified at
// CompositorFrameTransitionDirective deserialization time.
auto clamped_duration =
duration_ < viz::CompositorFrameTransitionDirective::kMaxDuration
? duration_
: viz::CompositorFrameTransitionDirective::kMaxDuration;
return viz::CompositorFrameTransitionDirective(s_next_sequence_id_++, type_,
effect_, clamped_duration);
}
std::string DocumentTransitionRequest::ToString() const {
std::ostringstream str;
str << "[type: " << TypeToString(type_)
<< " effect: " << EffectToString(effect_)
<< " duration: " << duration_.InMillisecondsF() << "ms]";
return str.str();
}
} // namespace cc