OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/renderer_host/render_widget_host_impl.h" | 5 #include "content/browser/renderer_host/render_widget_host_impl.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <tuple> | 10 #include <tuple> |
(...skipping 2528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2539 renderer_compositor_frame_sink_ = std::move(client); | 2539 renderer_compositor_frame_sink_ = std::move(client); |
2540 } | 2540 } |
2541 | 2541 |
2542 void RenderWidgetHostImpl::SetNeedsBeginFrame(bool needs_begin_frame) { | 2542 void RenderWidgetHostImpl::SetNeedsBeginFrame(bool needs_begin_frame) { |
2543 OnSetNeedsBeginFrames(needs_begin_frame); | 2543 OnSetNeedsBeginFrames(needs_begin_frame); |
2544 } | 2544 } |
2545 | 2545 |
2546 void RenderWidgetHostImpl::SubmitCompositorFrame( | 2546 void RenderWidgetHostImpl::SubmitCompositorFrame( |
2547 const cc::LocalSurfaceId& local_surface_id, | 2547 const cc::LocalSurfaceId& local_surface_id, |
2548 cc::CompositorFrame frame) { | 2548 cc::CompositorFrame frame) { |
2549 // The renderer must allocate a new LocalSurfaceId if frame size or device | 2549 auto new_surface_properties = |
2550 // scale factor changes. | 2550 RenderWidgetSurfaceProperties::FromCompositorFrame(frame); |
2551 float device_scale_factor = frame.metadata.device_scale_factor; | 2551 |
2552 const gfx::Size& frame_size = | |
2553 frame.render_pass_list.back()->output_rect.size(); | |
2554 if (local_surface_id == last_local_surface_id_ && | 2552 if (local_surface_id == last_local_surface_id_ && |
2555 (frame_size != last_frame_size_ || | 2553 new_surface_properties != last_surface_properties_) { |
2556 device_scale_factor != last_device_scale_factor_)) { | 2554 bad_message::ReceivedBadMessage( |
2557 DLOG(ERROR) << "Renderer submitted frame of wrong size to its surface." | 2555 GetProcess(), bad_message::RWH_SURFACE_INVARIANTS_VIOLATION); |
2558 << " Expected: size=" << last_frame_size_.ToString() | |
2559 << ",scale=" << last_device_scale_factor_ | |
2560 << " Received: size=" << frame_size.ToString() | |
2561 << ",scale=" << device_scale_factor; | |
2562 return; | 2556 return; |
2563 } | 2557 } |
2564 | 2558 |
2565 uint32_t frame_token = frame.metadata.frame_token; | |
2566 | |
2567 last_local_surface_id_ = local_surface_id; | 2559 last_local_surface_id_ = local_surface_id; |
2568 last_frame_size_ = frame_size; | 2560 last_surface_properties_ = new_surface_properties; |
2569 last_device_scale_factor_ = device_scale_factor; | |
2570 | 2561 |
2571 last_received_content_source_id_ = frame.metadata.content_source_id; | 2562 last_received_content_source_id_ = frame.metadata.content_source_id; |
| 2563 uint32_t frame_token = frame.metadata.frame_token; |
2572 | 2564 |
2573 // |has_damage| is not transmitted. | 2565 // |has_damage| is not transmitted. |
2574 frame.metadata.begin_frame_ack.has_damage = true; | 2566 frame.metadata.begin_frame_ack.has_damage = true; |
2575 | 2567 |
2576 last_frame_metadata_ = frame.metadata.Clone(); | 2568 last_frame_metadata_ = frame.metadata.Clone(); |
2577 | 2569 |
2578 latency_tracker_.OnSwapCompositorFrame(&frame.metadata.latency_info); | 2570 latency_tracker_.OnSwapCompositorFrame(&frame.metadata.latency_info); |
2579 | 2571 |
2580 bool is_mobile_optimized = IsMobileOptimizedFrame(frame.metadata); | 2572 bool is_mobile_optimized = IsMobileOptimizedFrame(frame.metadata); |
2581 input_router_->NotifySiteIsMobileOptimized(is_mobile_optimized); | 2573 input_router_->NotifySiteIsMobileOptimized(is_mobile_optimized); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2633 RenderProcessHost* rph = GetProcess(); | 2625 RenderProcessHost* rph = GetProcess(); |
2634 for (std::vector<IPC::Message>::const_iterator i = messages.begin(); | 2626 for (std::vector<IPC::Message>::const_iterator i = messages.begin(); |
2635 i != messages.end(); ++i) { | 2627 i != messages.end(); ++i) { |
2636 rph->OnMessageReceived(*i); | 2628 rph->OnMessageReceived(*i); |
2637 if (i->dispatch_error()) | 2629 if (i->dispatch_error()) |
2638 rph->OnBadMessageReceived(*i); | 2630 rph->OnBadMessageReceived(*i); |
2639 } | 2631 } |
2640 } | 2632 } |
2641 | 2633 |
2642 } // namespace content | 2634 } // namespace content |
OLD | NEW |