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

Side by Side Diff: trunk/src/content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 387863004: Revert 281866 "Mac ÜC: Make resize smooth" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 5 months 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 | Annotate | Revision Log
OLDNEW
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_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <OpenGL/gl.h> 8 #include <OpenGL/gl.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 10
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 ui::Layer* RenderWidgetHostViewMac::GetLayer() { 406 ui::Layer* RenderWidgetHostViewMac::GetLayer() {
407 return root_layer_.get(); 407 return root_layer_.get();
408 } 408 }
409 409
410 RenderWidgetHostImpl* RenderWidgetHostViewMac::GetHost() { 410 RenderWidgetHostImpl* RenderWidgetHostViewMac::GetHost() {
411 return render_widget_host_; 411 return render_widget_host_;
412 } 412 }
413 413
414 void RenderWidgetHostViewMac::SchedulePaintInRect( 414 void RenderWidgetHostViewMac::SchedulePaintInRect(
415 const gfx::Rect& damage_rect_in_dip) { 415 const gfx::Rect& damage_rect_in_dip) {
416 // Do not paint immediately because this is being called from deep inside 416 if (browser_compositor_view_)
417 // DelegatedFrameHost, and not all of its state is set up yet. 417 browser_compositor_view_->GetCompositor()->ScheduleFullRedraw();
418 if (browser_compositor_view_ && !browser_compositor_has_pending_paint_) {
419 browser_compositor_has_pending_paint_ = true;
420 base::MessageLoop::current()->PostTask(FROM_HERE,
421 base::Bind(&RenderWidgetHostViewMac::DoBrowserCompositorPendingPaint,
422 weak_factory_.GetWeakPtr()));
423 }
424 }
425
426 void RenderWidgetHostViewMac::DoBrowserCompositorPendingPaint() {
427 if (browser_compositor_has_pending_paint_) {
428 browser_compositor_view_->GetCompositor()->Draw();
429 browser_compositor_has_pending_paint_ = false;
430 }
431 } 418 }
432 419
433 bool RenderWidgetHostViewMac::IsVisible() { 420 bool RenderWidgetHostViewMac::IsVisible() {
434 return !render_widget_host_->is_hidden(); 421 return !render_widget_host_->is_hidden();
435 } 422 }
436 423
437 gfx::Size RenderWidgetHostViewMac::DesiredFrameSize() { 424 gfx::Size RenderWidgetHostViewMac::DesiredFrameSize() {
438 return GetViewBounds().size(); 425 return GetViewBounds().size();
439 } 426 }
440 427
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 461 }
475 462
476 NSView* RenderWidgetHostViewMac::BrowserCompositorSuperview() { 463 NSView* RenderWidgetHostViewMac::BrowserCompositorSuperview() {
477 return cocoa_view_; 464 return cocoa_view_;
478 } 465 }
479 466
480 ui::Layer* RenderWidgetHostViewMac::BrowserCompositorRootLayer() { 467 ui::Layer* RenderWidgetHostViewMac::BrowserCompositorRootLayer() {
481 return root_layer_.get(); 468 return root_layer_.get();
482 } 469 }
483 470
484 bool RenderWidgetHostViewMac::BrowserCompositorShouldDrawImmediately() {
485 return is_paused_for_resize_or_repaint_;
486 }
487
488 /////////////////////////////////////////////////////////////////////////////// 471 ///////////////////////////////////////////////////////////////////////////////
489 // RenderWidgetHostViewBase, public: 472 // RenderWidgetHostViewBase, public:
490 473
491 // static 474 // static
492 void RenderWidgetHostViewBase::GetDefaultScreenInfo( 475 void RenderWidgetHostViewBase::GetDefaultScreenInfo(
493 blink::WebScreenInfo* results) { 476 blink::WebScreenInfo* results) {
494 *results = GetWebScreenInfo(NULL); 477 *results = GetWebScreenInfo(NULL);
495 } 478 }
496 479
497 /////////////////////////////////////////////////////////////////////////////// 480 ///////////////////////////////////////////////////////////////////////////////
498 // RenderWidgetHostViewMac, public: 481 // RenderWidgetHostViewMac, public:
499 482
500 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) 483 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
501 : render_widget_host_(RenderWidgetHostImpl::From(widget)), 484 : render_widget_host_(RenderWidgetHostImpl::From(widget)),
502 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 485 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
503 can_compose_inline_(true), 486 can_compose_inline_(true),
504 browser_compositor_has_pending_paint_(false),
505 browser_compositor_view_placeholder_( 487 browser_compositor_view_placeholder_(
506 new BrowserCompositorViewPlaceholderMac), 488 new BrowserCompositorViewPlaceholderMac),
507 backing_store_scale_factor_(1), 489 backing_store_scale_factor_(1),
508 is_loading_(false), 490 is_loading_(false),
509 is_paused_for_resize_or_repaint_(false),
510 weak_factory_(this), 491 weak_factory_(this),
511 fullscreen_parent_host_view_(NULL), 492 fullscreen_parent_host_view_(NULL),
512 overlay_view_weak_factory_(this), 493 overlay_view_weak_factory_(this),
513 software_frame_weak_ptr_factory_(this) { 494 software_frame_weak_ptr_factory_(this) {
514 software_frame_manager_.reset(new SoftwareFrameManager( 495 software_frame_manager_.reset(new SoftwareFrameManager(
515 software_frame_weak_ptr_factory_.GetWeakPtr())); 496 software_frame_weak_ptr_factory_.GetWeakPtr()));
516 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| 497 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_|
517 // goes away. Since we autorelease it, our caller must put 498 // goes away. Since we autorelease it, our caller must put
518 // |GetNativeView()| into the view hierarchy right after calling us. 499 // |GetNativeView()| into the view hierarchy right after calling us.
519 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc] 500 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc]
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 return; 606 return;
626 if (browser_compositor_view_) 607 if (browser_compositor_view_)
627 return; 608 return;
628 609
629 TRACE_EVENT0("browser", 610 TRACE_EVENT0("browser",
630 "RenderWidgetHostViewMac::EnsureBrowserCompositorView"); 611 "RenderWidgetHostViewMac::EnsureBrowserCompositorView");
631 612
632 browser_compositor_view_.reset(new BrowserCompositorViewMac(this)); 613 browser_compositor_view_.reset(new BrowserCompositorViewMac(this));
633 delegated_frame_host_->AddedToWindow(); 614 delegated_frame_host_->AddedToWindow();
634 delegated_frame_host_->WasShown(); 615 delegated_frame_host_->WasShown();
635 RenderWidgetHelper::SetRenderWidgetIDForWidget(
636 browser_compositor_view_->GetView(),
637 render_widget_host_->GetProcess()->GetID(),
638 render_widget_host_->GetRoutingID());
639 } 616 }
640 617
641 void RenderWidgetHostViewMac::DestroyBrowserCompositorView() { 618 void RenderWidgetHostViewMac::DestroyBrowserCompositorView() {
642 TRACE_EVENT0("browser", 619 TRACE_EVENT0("browser",
643 "RenderWidgetHostViewMac::DestroyBrowserCompositorView"); 620 "RenderWidgetHostViewMac::DestroyBrowserCompositorView");
644 if (!browser_compositor_view_) 621 if (!browser_compositor_view_)
645 return; 622 return;
646 623
647 delegated_frame_host_->WasHidden(); 624 delegated_frame_host_->WasHidden();
648 delegated_frame_host_->RemovingFromWindow(); 625 delegated_frame_host_->RemovingFromWindow();
649 RenderWidgetHelper::ResetRenderWidgetIDForWidget(
650 browser_compositor_view_->GetView());
651 browser_compositor_view_.reset(); 626 browser_compositor_view_.reset();
652 browser_compositor_has_pending_paint_ = false;
653 } 627 }
654 628
655 void RenderWidgetHostViewMac::EnsureSoftwareLayer() { 629 void RenderWidgetHostViewMac::EnsureSoftwareLayer() {
656 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::EnsureSoftwareLayer"); 630 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::EnsureSoftwareLayer");
657 if (software_layer_) 631 if (software_layer_)
658 return; 632 return;
659 633
660 software_layer_.reset([[SoftwareLayer alloc] init]); 634 software_layer_.reset([[SoftwareLayer alloc] init]);
661 DCHECK(software_layer_); 635 DCHECK(software_layer_);
662 636
(...skipping 1160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1823 if (compositing_iosurface_) { 1797 if (compositing_iosurface_) {
1824 return compositing_iosurface_->HasIOSurface() && 1798 return compositing_iosurface_->HasIOSurface() &&
1825 (desired_size.IsEmpty() || 1799 (desired_size.IsEmpty() ||
1826 compositing_iosurface_->dip_io_surface_size() == desired_size); 1800 compositing_iosurface_->dip_io_surface_size() == desired_size);
1827 } 1801 }
1828 if (software_frame_manager_->HasCurrentFrame()) { 1802 if (software_frame_manager_->HasCurrentFrame()) {
1829 return (desired_size.IsEmpty() || 1803 return (desired_size.IsEmpty() ||
1830 software_frame_manager_->GetCurrentFrameSizeInDIP() == 1804 software_frame_manager_->GetCurrentFrameSizeInDIP() ==
1831 desired_size); 1805 desired_size);
1832 } 1806 }
1833 if (browser_compositor_view_)
1834 return browser_compositor_view_->HasFrameWithSizeInDIP(desired_size);
1835 return false; 1807 return false;
1836 } 1808 }
1837 1809
1838 void RenderWidgetHostViewMac::OnSwapCompositorFrame( 1810 void RenderWidgetHostViewMac::OnSwapCompositorFrame(
1839 uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) { 1811 uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) {
1840 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame"); 1812 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame");
1841 1813
1842 if (frame->delegated_frame_data) { 1814 if (frame->delegated_frame_data) {
1843 float scale_factor = frame->metadata.device_scale_factor; 1815 float scale_factor = frame->metadata.device_scale_factor;
1844 1816
(...skipping 11 matching lines...) Expand all
1856 scale_factor, pixel_size); 1828 scale_factor, pixel_size);
1857 } 1829 }
1858 1830
1859 SendVSyncParametersToRenderer(); 1831 SendVSyncParametersToRenderer();
1860 1832
1861 delegated_frame_host_->SwapDelegatedFrame( 1833 delegated_frame_host_->SwapDelegatedFrame(
1862 output_surface_id, 1834 output_surface_id,
1863 frame->delegated_frame_data.Pass(), 1835 frame->delegated_frame_data.Pass(),
1864 frame->metadata.device_scale_factor, 1836 frame->metadata.device_scale_factor,
1865 frame->metadata.latency_info); 1837 frame->metadata.latency_info);
1866
1867 DoBrowserCompositorPendingPaint();
1868 } else if (frame->software_frame_data) { 1838 } else if (frame->software_frame_data) {
1869 if (!software_frame_manager_->SwapToNewFrame( 1839 if (!software_frame_manager_->SwapToNewFrame(
1870 output_surface_id, 1840 output_surface_id,
1871 frame->software_frame_data.get(), 1841 frame->software_frame_data.get(),
1872 frame->metadata.device_scale_factor, 1842 frame->metadata.device_scale_factor,
1873 render_widget_host_->GetProcess()->GetHandle())) { 1843 render_widget_host_->GetProcess()->GetHandle())) {
1874 render_widget_host_->GetProcess()->ReceivedBadMessage(); 1844 render_widget_host_->GetProcess()->ReceivedBadMessage();
1875 return; 1845 return;
1876 } 1846 }
1877 1847
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 RenderWidgetHostImpl::AcknowledgeBufferPresent(pending_swap_ack_->route_id, 2182 RenderWidgetHostImpl::AcknowledgeBufferPresent(pending_swap_ack_->route_id,
2213 pending_swap_ack_->gpu_host_id, 2183 pending_swap_ack_->gpu_host_id,
2214 ack_params); 2184 ack_params);
2215 pending_swap_ack_.reset(); 2185 pending_swap_ack_.reset();
2216 } 2186 }
2217 2187
2218 void RenderWidgetHostViewMac::PauseForPendingResizeOrRepaintsAndDraw() { 2188 void RenderWidgetHostViewMac::PauseForPendingResizeOrRepaintsAndDraw() {
2219 if (!render_widget_host_ || render_widget_host_->is_hidden()) 2189 if (!render_widget_host_ || render_widget_host_->is_hidden())
2220 return; 2190 return;
2221 2191
2192 // Synchronized resizing does not yet work with browser compositor.
2193 // http://crbug.com/388005
2194 if (delegated_frame_host_)
2195 return;
2196
2222 // Pausing for the overlay/underlay view prevents the other one from receiving 2197 // Pausing for the overlay/underlay view prevents the other one from receiving
2223 // frames. This may lead to large delays, causing overlaps. 2198 // frames. This may lead to large delays, causing overlaps.
2224 // See crbug.com/352020. 2199 // See crbug.com/352020.
2225 if (underlay_view_ || overlay_view_) 2200 if (underlay_view_ || overlay_view_)
2226 return; 2201 return;
2227 2202
2228 // Ensure that all frames are acked before waiting for a frame to come in. 2203 // Ensure that all frames are acked before waiting for a frame to come in.
2229 // Note that we will draw a frame at the end of this function, so it is safe 2204 // Note that we will draw a frame at the end of this function, so it is safe
2230 // to ack a never-drawn frame here. 2205 // to ack a never-drawn frame here.
2231 SendPendingSwapAck(); 2206 SendPendingSwapAck();
2232 2207
2233 // Wait for a frame of the right size to come in. 2208 // Wait for a frame of the right size to come in.
2234 is_paused_for_resize_or_repaint_ = true;
2235 render_widget_host_->PauseForPendingResizeOrRepaints(); 2209 render_widget_host_->PauseForPendingResizeOrRepaints();
2236 is_paused_for_resize_or_repaint_ = false;
2237 2210
2238 // Immediately draw any frames that haven't been drawn yet. This is necessary 2211 // Immediately draw any frames that haven't been drawn yet. This is necessary
2239 // to keep the window and the window's contents in sync. 2212 // to keep the window and the window's contents in sync.
2240 [cocoa_view_ displayIfNeeded]; 2213 [cocoa_view_ displayIfNeeded];
2241 [software_layer_ displayIfNeeded]; 2214 [software_layer_ displayIfNeeded];
2242 [compositing_iosurface_layer_ displayIfNeeded]; 2215 [compositing_iosurface_layer_ displayIfNeeded];
2243 } 2216 }
2244 2217
2245 void RenderWidgetHostViewMac::LayoutLayers() { 2218 void RenderWidgetHostViewMac::LayoutLayers() {
2246 if (delegated_frame_host_) { 2219 if (delegated_frame_host_) {
(...skipping 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after
3981 3954
3982 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3955 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3983 // regions that are not draggable. (See ControlRegionView in 3956 // regions that are not draggable. (See ControlRegionView in
3984 // native_app_window_cocoa.mm). This requires the render host view to be 3957 // native_app_window_cocoa.mm). This requires the render host view to be
3985 // draggable by default. 3958 // draggable by default.
3986 - (BOOL)mouseDownCanMoveWindow { 3959 - (BOOL)mouseDownCanMoveWindow {
3987 return YES; 3960 return YES;
3988 } 3961 }
3989 3962
3990 @end 3963 @end
OLDNEW
« no previous file with comments | « trunk/src/content/browser/renderer_host/render_widget_host_view_mac.h ('k') | trunk/src/content/common/view_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698