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

Side by Side Diff: content/browser/frame_host/render_widget_host_view_guest.cc

Issue 2485473003: Remove SurfaceFactory::Create and SurfaceFactory::Destroy (Closed)
Patch Set: up Created 4 years, 1 month 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/render_widget_host_view_guest.h" 5 #include "content/browser/frame_host/render_widget_host_view_guest.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 ClearCompositorSurfaceIfNecessary(); 293 ClearCompositorSurfaceIfNecessary();
294 // If the renderer changed its frame sink, reset the surface factory to 294 // If the renderer changed its frame sink, reset the surface factory to
295 // avoid returning stale resources. 295 // avoid returning stale resources.
296 if (compositor_frame_sink_id != last_compositor_frame_sink_id_) 296 if (compositor_frame_sink_id != last_compositor_frame_sink_id_)
297 surface_factory_->Reset(); 297 surface_factory_->Reset();
298 last_compositor_frame_sink_id_ = compositor_frame_sink_id; 298 last_compositor_frame_sink_id_ = compositor_frame_sink_id;
299 current_surface_size_ = frame_size; 299 current_surface_size_ = frame_size;
300 current_surface_scale_factor_ = scale_factor; 300 current_surface_scale_factor_ = scale_factor;
301 } 301 }
302 302
303 bool was_null = false;
303 if (!local_frame_id_.is_valid()) { 304 if (!local_frame_id_.is_valid()) {
304 local_frame_id_ = id_allocator_->GenerateId(); 305 local_frame_id_ = id_allocator_->GenerateId();
305 surface_factory_->Create(local_frame_id_); 306 was_null = true;
307 }
306 308
309 cc::SurfaceFactory::DrawCallback ack_callback = base::Bind(
310 &RenderWidgetHostViewChildFrame::SurfaceDrawn,
311 RenderWidgetHostViewChildFrame::AsWeakPtr(), compositor_frame_sink_id);
312 ack_pending_count_++;
313 // If this value grows very large, something is going wrong.
314 DCHECK(ack_pending_count_ < 1000);
315 surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame),
316 ack_callback);
317
318 if (was_null) {
307 cc::SurfaceSequence sequence = 319 cc::SurfaceSequence sequence =
308 cc::SurfaceSequence(frame_sink_id_, next_surface_sequence_++); 320 cc::SurfaceSequence(frame_sink_id_, next_surface_sequence_++);
309 // The renderer process will satisfy this dependency when it creates a 321 // The renderer process will satisfy this dependency when it creates a
310 // SurfaceLayer. 322 // SurfaceLayer.
311 cc::SurfaceManager* manager = GetSurfaceManager(); 323 cc::SurfaceManager* manager = GetSurfaceManager();
312 cc::SurfaceId surface_id(frame_sink_id_, local_frame_id_); 324 cc::SurfaceId surface_id(frame_sink_id_, local_frame_id_);
313 manager->GetSurfaceForId(surface_id)->AddDestructionDependency(sequence); 325 manager->GetSurfaceForId(surface_id)->AddDestructionDependency(sequence);
314 // TODO(wjmaclean): I'm not sure what it means to create a surface id 326 // TODO(wjmaclean): I'm not sure what it means to create a surface id
315 // without setting it on the child, though since we will in this case be 327 // without setting it on the child, though since we will in this case be
316 // guaranteed to call ClearCompositorSurfaceIfNecessary() below, I suspect 328 // guaranteed to call ClearCompositorSurfaceIfNecessary() below, I suspect
317 // skipping SetChildFrameSurface() here is irrelevant. 329 // skipping SetChildFrameSurface() here is irrelevant.
318 if (guest_ && !guest_->is_in_destruction()) { 330 if (guest_ && !guest_->is_in_destruction()) {
319 guest_->SetChildFrameSurface(surface_id, frame_size, scale_factor, 331 guest_->SetChildFrameSurface(surface_id, frame_size, scale_factor,
320 sequence); 332 sequence);
321 } 333 }
322 } 334 }
323
324 cc::SurfaceFactory::DrawCallback ack_callback = base::Bind(
325 &RenderWidgetHostViewChildFrame::SurfaceDrawn,
326 RenderWidgetHostViewChildFrame::AsWeakPtr(), compositor_frame_sink_id);
327 ack_pending_count_++;
328 // If this value grows very large, something is going wrong.
329 DCHECK(ack_pending_count_ < 1000);
330 surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame),
331 ack_callback);
332
333 ProcessFrameSwappedCallbacks(); 335 ProcessFrameSwappedCallbacks();
334 336
335 // If after detaching we are sent a frame, we should finish processing it, and 337 // If after detaching we are sent a frame, we should finish processing it, and
336 // then we should clear the surface so that we are not holding resources we 338 // then we should clear the surface so that we are not holding resources we
337 // no longer need. 339 // no longer need.
338 if (!guest_ || !guest_->attached()) 340 if (!guest_ || !guest_->attached())
339 ClearCompositorSurfaceIfNecessary(); 341 ClearCompositorSurfaceIfNecessary();
340 } 342 }
341 343
342 bool RenderWidgetHostViewGuest::OnMessageReceived(const IPC::Message& msg) { 344 bool RenderWidgetHostViewGuest::OnMessageReceived(const IPC::Message& msg) {
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 gesture_event.data.scrollUpdate.inertialPhase == 683 gesture_event.data.scrollUpdate.inertialPhase ==
682 blink::WebGestureEvent::MomentumPhase) { 684 blink::WebGestureEvent::MomentumPhase) {
683 return; 685 return;
684 } 686 }
685 host_->ForwardGestureEvent(gesture_event); 687 host_->ForwardGestureEvent(gesture_event);
686 return; 688 return;
687 } 689 }
688 } 690 }
689 691
690 } // namespace content 692 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698