@@ -42,6 +42,18 @@ bool DisplayListEmbedderViewSlice::recording_ended() {
4242 return builder_ == nullptr ;
4343}
4444
45+ void ExternalViewEmbedder::BeginFrame (
46+ GrDirectContext* context,
47+ fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
48+ SetState (State::kFrameStarted );
49+ }
50+
51+ void ExternalViewEmbedder::PrepareView (int64_t native_view_id,
52+ SkISize frame_size,
53+ double device_pixel_ratio) {
54+ SetState (State::kViewPrepared );
55+ }
56+
4557void ExternalViewEmbedder::SubmitView (
4658 GrDirectContext* context,
4759 const std::shared_ptr<impeller::AiksContext>& aiks_context,
@@ -50,6 +62,16 @@ void ExternalViewEmbedder::SubmitView(
5062 frame->Submit ();
5163}
5264
65+ void ExternalViewEmbedder::EndFrame (
66+ bool should_resubmit_frame,
67+ fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
68+ SetState (State::kIdle );
69+ }
70+
71+ void ExternalViewEmbedder::CancelFrame () {
72+ SetState (State::kIdle );
73+ }
74+
5375void ExternalViewEmbedder::EndFrameIfNecessary (
5476 bool should_resubmit_frame,
5577 fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) {
@@ -67,25 +89,47 @@ bool ExternalViewEmbedder::SupportsDynamicThreadMerging() {
6789void ExternalViewEmbedder::Teardown () {}
6890
6991void ExternalViewEmbedder::SetState (State new_state) {
92+ #ifdef NDEBUG
93+ return ;
94+ #else
95+ auto CheckState = [current_state = state_](bool condition) {
96+ auto StateToString = [](State state) -> const char * {
97+ switch (state) {
98+ case State::kIdle :
99+ return " kIdle" ;
100+ case State::kFrameStarted :
101+ return " kFrameStarted" ;
102+ case State::kViewPrepared :
103+ return " kViewPrepared" ;
104+ };
105+ FML_UNREACHABLE ();
106+ return " " ;
107+ };
108+
109+ FML_DCHECK (condition) << " Current state is "
110+ << StateToString (current_state);
111+ };
112+
70113 switch (state_) {
71114 case State::kIdle :
72- FML_DCHECK (new_state == State::kFrameStarted );
115+ CheckState (new_state == State::kFrameStarted );
73116 break ;
74117
75118 case State::kFrameStarted :
76- FML_DCHECK (new_state == State::kIdle ||
119+ CheckState (new_state == State::kIdle ||
77120 new_state == State::kViewPrepared );
78121 break ;
79122
80123 case State::kViewPrepared :
81- FML_DCHECK (new_state == State::kFrameStarted );
124+ CheckState (new_state == State::kFrameStarted );
82125 break ;
83126
84127 default :
85128 FML_UNREACHABLE ();
86129 break ;
87130 }
88131 state_ = new_state;
132+ #endif
89133}
90134
91135void MutatorsStack::PushClipRect (const SkRect& rect) {
0 commit comments