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

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

Issue 116103002: Remove code only used by Mac single threaded compositing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pull out a bit more Created 7 years 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 <QuartzCore/QuartzCore.h> 8 #include <QuartzCore/QuartzCore.h>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 call_set_needs_display_in_rect_pending_(false), 411 call_set_needs_display_in_rect_pending_(false),
412 last_frame_was_accelerated_(false), 412 last_frame_was_accelerated_(false),
413 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 413 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
414 can_compose_inline_(true), 414 can_compose_inline_(true),
415 software_frame_needs_to_send_ack_(false), 415 software_frame_needs_to_send_ack_(false),
416 allow_overlapping_views_(false), 416 allow_overlapping_views_(false),
417 use_core_animation_(false), 417 use_core_animation_(false),
418 is_loading_(false), 418 is_loading_(false),
419 weak_factory_(this), 419 weak_factory_(this),
420 fullscreen_parent_host_view_(NULL), 420 fullscreen_parent_host_view_(NULL),
421 pending_swap_buffers_acks_weak_factory_(this),
422 underlay_view_has_drawn_(false), 421 underlay_view_has_drawn_(false),
423 overlay_view_weak_factory_(this), 422 overlay_view_weak_factory_(this),
424 next_swap_ack_time_(base::Time::Now()),
425 software_frame_weak_ptr_factory_(this) { 423 software_frame_weak_ptr_factory_(this) {
426 software_frame_manager_.reset(new SoftwareFrameManager( 424 software_frame_manager_.reset(new SoftwareFrameManager(
427 software_frame_weak_ptr_factory_.GetWeakPtr())); 425 software_frame_weak_ptr_factory_.GetWeakPtr()));
428 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| 426 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_|
429 // goes away. Since we autorelease it, our caller must put 427 // goes away. Since we autorelease it, our caller must put
430 // |GetNativeView()| into the view hierarchy right after calling us. 428 // |GetNativeView()| into the view hierarchy right after calling us.
431 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc] 429 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc]
432 initWithRenderWidgetHostViewMac:this] autorelease]; 430 initWithRenderWidgetHostViewMac:this] autorelease];
433 431
434 if (GetCoreAnimationStatus() == CORE_ANIMATION_ENABLED_ALWAYS) { 432 if (GetCoreAnimationStatus() == CORE_ANIMATION_ENABLED_ALWAYS) {
435 EnableCoreAnimation(); 433 EnableCoreAnimation();
436 } 434 }
437 435
438 render_widget_host_->SetView(this); 436 render_widget_host_->SetView(this);
439 } 437 }
440 438
441 RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { 439 RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
442 // This is being called from |cocoa_view_|'s destructor, so invalidate the 440 // This is being called from |cocoa_view_|'s destructor, so invalidate the
443 // pointer. 441 // pointer.
444 cocoa_view_ = nil; 442 cocoa_view_ = nil;
445 443
446 AckPendingSwapBuffers();
447 UnlockMouse(); 444 UnlockMouse();
448 445
449 // Make sure that the layer doesn't reach into the now-invalid object. 446 // Make sure that the layer doesn't reach into the now-invalid object.
450 DestroyCompositedIOSurfaceAndLayer(kDestroyContext); 447 DestroyCompositedIOSurfaceAndLayer(kDestroyContext);
451 software_layer_.reset(); 448 software_layer_.reset();
452 449
453 // We are owned by RenderWidgetHostViewCocoa, so if we go away before the 450 // We are owned by RenderWidgetHostViewCocoa, so if we go away before the
454 // RenderWidgetHost does we need to tell it not to hold a stale pointer to 451 // RenderWidgetHost does we need to tell it not to hold a stale pointer to
455 // us. 452 // us.
456 if (render_widget_host_) 453 if (render_widget_host_)
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 if (!use_core_animation_) 729 if (!use_core_animation_)
733 [[cocoa_view_ window] disableScreenUpdatesUntilFlush]; 730 [[cocoa_view_ window] disableScreenUpdatesUntilFlush];
734 731
735 [compositing_iosurface_layer_ setNeedsDisplay]; 732 [compositing_iosurface_layer_ setNeedsDisplay];
736 } 733 }
737 734
738 void RenderWidgetHostViewMac::WasHidden() { 735 void RenderWidgetHostViewMac::WasHidden() {
739 if (render_widget_host_->is_hidden()) 736 if (render_widget_host_->is_hidden())
740 return; 737 return;
741 738
742 // Send ACKs for any pending SwapBuffers (if any) since we won't be displaying
743 // them and the GPU process is waiting.
744 AckPendingSwapBuffers();
745
746 // If we have a renderer, then inform it that we are being hidden so it can 739 // If we have a renderer, then inform it that we are being hidden so it can
747 // reduce its resource utilization. 740 // reduce its resource utilization.
748 render_widget_host_->WasHidden(); 741 render_widget_host_->WasHidden();
749 software_frame_manager_->SetVisibility(false); 742 software_frame_manager_->SetVisibility(false);
750 743
751 // There can be a transparent flash as this view is removed and the next is 744 // There can be a transparent flash as this view is removed and the next is
752 // added, because of OSX windowing races between displaying the contents of 745 // added, because of OSX windowing races between displaying the contents of
753 // the NSView and its corresponding OpenGL context. 746 // the NSView and its corresponding OpenGL context.
754 // disableScreenUpdatesUntilFlush prevents the transparent flash by avoiding 747 // disableScreenUpdatesUntilFlush prevents the transparent flash by avoiding
755 // screen updates until the next tab draws. 748 // screen updates until the next tab draws.
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
981 if (!about_to_validate_and_paint_) 974 if (!about_to_validate_and_paint_)
982 [cocoa_view_ displayIfNeeded]; 975 [cocoa_view_ displayIfNeeded];
983 } 976 }
984 977
985 void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status, 978 void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status,
986 int error_code) { 979 int error_code) {
987 Destroy(); 980 Destroy();
988 } 981 }
989 982
990 void RenderWidgetHostViewMac::Destroy() { 983 void RenderWidgetHostViewMac::Destroy() {
991 AckPendingSwapBuffers();
992
993 [[NSNotificationCenter defaultCenter] 984 [[NSNotificationCenter defaultCenter]
994 removeObserver:cocoa_view_ 985 removeObserver:cocoa_view_
995 name:NSWindowWillCloseNotification 986 name:NSWindowWillCloseNotification
996 object:popup_window_]; 987 object:popup_window_];
997 988
998 // We've been told to destroy. 989 // We've been told to destroy.
999 [cocoa_view_ retain]; 990 [cocoa_view_ retain];
1000 [cocoa_view_ removeFromSuperview]; 991 [cocoa_view_ removeFromSuperview];
1001 [cocoa_view_ autorelease]; 992 [cocoa_view_ autorelease];
1002 993
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1377 } else { 1368 } else {
1378 if (!DrawIOSurfaceWithoutCoreAnimation()) { 1369 if (!DrawIOSurfaceWithoutCoreAnimation()) {
1379 [cocoa_view_ setNeedsDisplay:YES]; 1370 [cocoa_view_ setNeedsDisplay:YES];
1380 GotAcceleratedCompositingError(); 1371 GotAcceleratedCompositingError();
1381 return; 1372 return;
1382 } 1373 }
1383 } 1374 }
1384 } 1375 }
1385 } 1376 }
1386 1377
1387 void RenderWidgetHostViewMac::AckPendingSwapBuffers() {
1388 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::AckPendingSwapBuffers");
1389
1390 // Cancel any outstanding delayed calls to this function.
1391 pending_swap_buffers_acks_weak_factory_.InvalidateWeakPtrs();
1392
1393 while (!pending_swap_buffers_acks_.empty()) {
1394 if (pending_swap_buffers_acks_.front().first != 0) {
1395 AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
1396 ack_params.sync_point = 0;
1397 if (compositing_iosurface_)
1398 ack_params.renderer_id = compositing_iosurface_->GetRendererID();
1399 RenderWidgetHostImpl::AcknowledgeBufferPresent(
1400 pending_swap_buffers_acks_.front().first,
1401 pending_swap_buffers_acks_.front().second,
1402 ack_params);
1403 if (render_widget_host_) {
1404 render_widget_host_->AcknowledgeSwapBuffersToRenderer();
1405 }
1406 }
1407 pending_swap_buffers_acks_.erase(pending_swap_buffers_acks_.begin());
1408 }
1409 }
1410
1411 void RenderWidgetHostViewMac::ThrottledAckPendingSwapBuffers() {
1412 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1413
1414 // Send VSync parameters to the renderer's compositor thread.
1415 base::TimeTicks vsync_timebase;
1416 base::TimeDelta vsync_interval;
1417 GetVSyncParameters(&vsync_timebase, &vsync_interval);
1418 if (render_widget_host_ && compositing_iosurface_)
1419 render_widget_host_->UpdateVSyncParameters(vsync_timebase, vsync_interval);
1420
1421 // If the render widget host is responsible for throttling swaps to vsync rate
1422 // then don't ack the swapbuffers until a full vsync has passed since the last
1423 // ack was sent.
1424 bool throttle_swap_ack =
1425 render_widget_host_ &&
1426 !render_widget_host_->is_threaded_compositing_enabled() &&
1427 compositing_iosurface_context_ &&
1428 !compositing_iosurface_context_->is_vsync_disabled();
1429 base::Time now = base::Time::Now();
1430 if (throttle_swap_ack && next_swap_ack_time_ > now) {
1431 base::TimeDelta next_swap_ack_delay = next_swap_ack_time_ - now;
1432 next_swap_ack_time_ += vsync_interval;
1433 base::MessageLoop::current()->PostDelayedTask(
1434 FROM_HERE,
1435 base::Bind(&RenderWidgetHostViewMac::AckPendingSwapBuffers,
1436 pending_swap_buffers_acks_weak_factory_.GetWeakPtr()),
1437 next_swap_ack_delay);
1438 } else {
1439 next_swap_ack_time_ = now + vsync_interval;
1440 AckPendingSwapBuffers();
1441 }
1442 }
1443
1444 bool RenderWidgetHostViewMac::DrawIOSurfaceWithoutCoreAnimation() { 1378 bool RenderWidgetHostViewMac::DrawIOSurfaceWithoutCoreAnimation() {
1445 CHECK(!use_core_animation_); 1379 CHECK(!use_core_animation_);
1446 CHECK(compositing_iosurface_); 1380 CHECK(compositing_iosurface_);
1447 1381
1448 GLint old_gl_surface_order = 0; 1382 GLint old_gl_surface_order = 0;
1449 GLint new_gl_surface_order = allow_overlapping_views_ ? -1 : 1; 1383 GLint new_gl_surface_order = allow_overlapping_views_ ? -1 : 1;
1450 [compositing_iosurface_context_->nsgl_context() 1384 [compositing_iosurface_context_->nsgl_context()
1451 getValues:&old_gl_surface_order 1385 getValues:&old_gl_surface_order
1452 forParameter:NSOpenGLCPSurfaceOrder]; 1386 forParameter:NSOpenGLCPSurfaceOrder];
1453 if (old_gl_surface_order != new_gl_surface_order) { 1387 if (old_gl_surface_order != new_gl_surface_order) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 overlay_view_rect, 1431 overlay_view_rect,
1498 overlay_view_->scale_factor(), 1432 overlay_view_->scale_factor(),
1499 overlay_view_->frame_subscriber(), 1433 overlay_view_->frame_subscriber(),
1500 true); 1434 true);
1501 } 1435 }
1502 1436
1503 return true; 1437 return true;
1504 } 1438 }
1505 1439
1506 void RenderWidgetHostViewMac::GotAcceleratedCompositingError() { 1440 void RenderWidgetHostViewMac::GotAcceleratedCompositingError() {
1507 AckPendingSwapBuffers();
1508 DestroyCompositedIOSurfaceAndLayer(kDestroyContext); 1441 DestroyCompositedIOSurfaceAndLayer(kDestroyContext);
1509 // The existing GL contexts may be in a bad state, so don't re-use any of the 1442 // The existing GL contexts may be in a bad state, so don't re-use any of the
1510 // existing ones anymore, rather, allocate new ones. 1443 // existing ones anymore, rather, allocate new ones.
1511 CompositingIOSurfaceContext::MarkExistingContextsAsNotShareable(); 1444 CompositingIOSurfaceContext::MarkExistingContextsAsNotShareable();
1512 // Request that a new frame be generated. 1445 // Request that a new frame be generated.
1513 if (render_widget_host_) 1446 if (render_widget_host_)
1514 render_widget_host_->ScheduleComposite(); 1447 render_widget_host_->ScheduleComposite();
1515 // TODO(ccameron): It may be a good idea to request that the renderer recreate 1448 // TODO(ccameron): It may be a good idea to request that the renderer recreate
1516 // its GL context as well, and fall back to software if this happens 1449 // its GL context as well, and fall back to software if this happens
1517 // repeatedly. 1450 // repeatedly.
(...skipping 15 matching lines...) Expand all
1533 1466
1534 void RenderWidgetHostViewMac::RemoveOverlayView() { 1467 void RenderWidgetHostViewMac::RemoveOverlayView() {
1535 if (overlay_view_) { 1468 if (overlay_view_) {
1536 overlay_view_->underlay_view_.reset(); 1469 overlay_view_->underlay_view_.reset();
1537 overlay_view_.reset(); 1470 overlay_view_.reset();
1538 } 1471 }
1539 [cocoa_view_ setNeedsDisplay:YES]; 1472 [cocoa_view_ setNeedsDisplay:YES];
1540 [[cocoa_view_ window] disableScreenUpdatesUntilFlush]; 1473 [[cocoa_view_ window] disableScreenUpdatesUntilFlush];
1541 } 1474 }
1542 1475
1543 void RenderWidgetHostViewMac::GetVSyncParameters(
1544 base::TimeTicks* timebase, base::TimeDelta* interval) {
1545 if (compositing_iosurface_) {
1546 uint32 numerator = 0;
1547 uint32 denominator = 0;
1548 compositing_iosurface_->GetVSyncParameters(
1549 timebase, &numerator, &denominator);
1550 if (numerator > 0 && denominator > 0) {
1551 int64 interval_micros =
1552 1000000 * static_cast<int64>(numerator) / denominator;
1553 *interval = base::TimeDelta::FromMicroseconds(interval_micros);
1554 return;
1555 }
1556 }
1557
1558 // Pass reasonable default values if unable to get the actual ones
1559 // (e.g. CVDisplayLink failed to return them because the display is
1560 // in sleep mode).
1561 static const int64 kOneOverSixtyMicroseconds = 16669;
1562 *timebase = base::TimeTicks::Now(),
1563 *interval = base::TimeDelta::FromMicroseconds(kOneOverSixtyMicroseconds);
1564 }
1565
1566 bool RenderWidgetHostViewMac::GetLineBreakIndex( 1476 bool RenderWidgetHostViewMac::GetLineBreakIndex(
1567 const std::vector<gfx::Rect>& bounds, 1477 const std::vector<gfx::Rect>& bounds,
1568 const gfx::Range& range, 1478 const gfx::Range& range,
1569 size_t* line_break_point) { 1479 size_t* line_break_point) {
1570 DCHECK(line_break_point); 1480 DCHECK(line_break_point);
1571 if (range.start() >= bounds.size() || range.is_reversed() || range.is_empty()) 1481 if (range.start() >= bounds.size() || range.is_reversed() || range.is_empty())
1572 return false; 1482 return false;
1573 1483
1574 // We can't check line breaking completely from only rectangle array. Thus we 1484 // We can't check line breaking completely from only rectangle array. Thus we
1575 // assume the line breaking as the next character's y offset is larger than 1485 // assume the line breaking as the next character's y offset is larger than
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 return true; 1598 return true;
1689 } 1599 }
1690 1600
1691 void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( 1601 void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped(
1692 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params, 1602 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
1693 int gpu_host_id) { 1603 int gpu_host_id) {
1694 TRACE_EVENT0("browser", 1604 TRACE_EVENT0("browser",
1695 "RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped"); 1605 "RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped");
1696 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1606 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1697 1607
1698 pending_swap_buffers_acks_.push_back(std::make_pair(params.route_id,
1699 gpu_host_id));
1700
1701 CompositorSwapBuffers(params.surface_handle, 1608 CompositorSwapBuffers(params.surface_handle,
1702 params.size, 1609 params.size,
1703 params.scale_factor, 1610 params.scale_factor,
1704 params.latency_info); 1611 params.latency_info);
1705 1612
1706 ThrottledAckPendingSwapBuffers(); 1613 AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
1614 ack_params.sync_point = 0;
1615 ack_params.renderer_id = compositing_iosurface_ ?
1616 compositing_iosurface_->GetRendererID() : 0;
1617 RenderWidgetHostImpl::AcknowledgeBufferPresent(params.route_id,
1618 gpu_host_id,
1619 ack_params);
1620 render_widget_host_->AcknowledgeSwapBuffersToRenderer();
1707 } 1621 }
1708 1622
1709 void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer( 1623 void RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer(
1710 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, 1624 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params,
1711 int gpu_host_id) { 1625 int gpu_host_id) {
1712 TRACE_EVENT0("browser", 1626 TRACE_EVENT0("browser",
1713 "RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer"); 1627 "RenderWidgetHostViewMac::AcceleratedSurfacePostSubBuffer");
1714 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1628 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1715 1629
1716 pending_swap_buffers_acks_.push_back(std::make_pair(params.route_id,
1717 gpu_host_id));
1718
1719 CompositorSwapBuffers(params.surface_handle, 1630 CompositorSwapBuffers(params.surface_handle,
1720 params.surface_size, 1631 params.surface_size,
1721 params.surface_scale_factor, 1632 params.surface_scale_factor,
1722 params.latency_info); 1633 params.latency_info);
1723 1634
1724 ThrottledAckPendingSwapBuffers(); 1635 AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
1636 ack_params.sync_point = 0;
1637 ack_params.renderer_id = compositing_iosurface_ ?
1638 compositing_iosurface_->GetRendererID() : 0;
1639 RenderWidgetHostImpl::AcknowledgeBufferPresent(params.route_id,
1640 gpu_host_id,
1641 ack_params);
1642 render_widget_host_->AcknowledgeSwapBuffersToRenderer();
1725 } 1643 }
1726 1644
1727 void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() { 1645 void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() {
1728 if (compositing_iosurface_) 1646 if (compositing_iosurface_)
1729 compositing_iosurface_->UnrefIOSurface(); 1647 compositing_iosurface_->UnrefIOSurface();
1730 } 1648 }
1731 1649
1732 void RenderWidgetHostViewMac::AcceleratedSurfaceRelease() { 1650 void RenderWidgetHostViewMac::AcceleratedSurfaceRelease() {
1733 DestroyCompositedIOSurfaceAndLayer(kDestroyContext); 1651 DestroyCompositedIOSurfaceAndLayer(kDestroyContext);
1734 } 1652 }
1735 1653
1736 bool RenderWidgetHostViewMac::HasAcceleratedSurface( 1654 bool RenderWidgetHostViewMac::HasAcceleratedSurface(
1737 const gfx::Size& desired_size) { 1655 const gfx::Size& desired_size) {
1738 if (last_frame_was_accelerated_) { 1656 if (last_frame_was_accelerated_) {
1739 return compositing_iosurface_ && 1657 return compositing_iosurface_ &&
1740 compositing_iosurface_->HasIOSurface() && 1658 compositing_iosurface_->HasIOSurface() &&
1741 (desired_size.IsEmpty() || 1659 (desired_size.IsEmpty() ||
1742 compositing_iosurface_->dip_io_surface_size() == desired_size); 1660 compositing_iosurface_->dip_io_surface_size() == desired_size);
1743 } else { 1661 } else {
1744 return (software_frame_manager_->HasCurrentFrame() && 1662 return (software_frame_manager_->HasCurrentFrame() &&
1745 (desired_size.IsEmpty() || 1663 (desired_size.IsEmpty() ||
1746 software_frame_manager_->GetCurrentFrameSizeInDIP() == 1664 software_frame_manager_->GetCurrentFrameSizeInDIP() ==
1747 desired_size)); 1665 desired_size));
1748 } 1666 }
1749 return false; 1667 return false;
1750 } 1668 }
1751 1669
1752 void RenderWidgetHostViewMac::AboutToWaitForBackingStoreMsg() {
1753 AckPendingSwapBuffers();
1754 }
1755
1756 void RenderWidgetHostViewMac::OnSwapCompositorFrame( 1670 void RenderWidgetHostViewMac::OnSwapCompositorFrame(
1757 uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) { 1671 uint32 output_surface_id, scoped_ptr<cc::CompositorFrame> frame) {
1758 // Only software compositor frames are accepted. 1672 // Only software compositor frames are accepted.
1759 if (!frame->software_frame_data) { 1673 if (!frame->software_frame_data) {
1760 DLOG(ERROR) << "Received unexpected frame type."; 1674 DLOG(ERROR) << "Received unexpected frame type.";
1761 RecordAction( 1675 RecordAction(
1762 UserMetricsAction("BadMessageTerminate_UnexpectedFrameType")); 1676 UserMetricsAction("BadMessageTerminate_UnexpectedFrameType"));
1763 render_widget_host_->GetProcess()->ReceivedBadMessage(); 1677 render_widget_host_->GetProcess()->ReceivedBadMessage();
1764 return; 1678 return;
1765 } 1679 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1912 // Delete software backingstore. 1826 // Delete software backingstore.
1913 BackingStoreManager::RemoveBackingStore(render_widget_host_); 1827 BackingStoreManager::RemoveBackingStore(render_widget_host_);
1914 software_frame_manager_->DiscardCurrentFrame(); 1828 software_frame_manager_->DiscardCurrentFrame();
1915 } 1829 }
1916 } 1830 }
1917 1831
1918 void RenderWidgetHostViewMac::GotSoftwareFrame() { 1832 void RenderWidgetHostViewMac::GotSoftwareFrame() {
1919 if (last_frame_was_accelerated_) { 1833 if (last_frame_was_accelerated_) {
1920 last_frame_was_accelerated_ = false; 1834 last_frame_was_accelerated_ = false;
1921 1835
1922 AckPendingSwapBuffers();
1923
1924 // If overlapping views are allowed, then don't unbind the context 1836 // If overlapping views are allowed, then don't unbind the context
1925 // from the view (that is, don't call clearDrawble -- just delete the 1837 // from the view (that is, don't call clearDrawble -- just delete the
1926 // texture and IOSurface). Rather, let it sit behind the software frame 1838 // texture and IOSurface). Rather, let it sit behind the software frame
1927 // that will be put up in front. This will prevent transparent 1839 // that will be put up in front. This will prevent transparent
1928 // flashes. 1840 // flashes.
1929 // http://crbug.com/154531 1841 // http://crbug.com/154531
1930 // Also note that it is necessary that clearDrawable be called if 1842 // Also note that it is necessary that clearDrawable be called if
1931 // overlapping views are not allowed, e.g, for content shell. 1843 // overlapping views are not allowed, e.g, for content shell.
1932 // http://crbug.com/178408 1844 // http://crbug.com/178408
1933 // Disable screen updates so that the changes of flashes is minimized. 1845 // Disable screen updates so that the changes of flashes is minimized.
(...skipping 2151 matching lines...) Expand 10 before | Expand all | Expand 10 after
4085 return YES; 3997 return YES;
4086 } 3998 }
4087 3999
4088 - (BOOL)isOpaque { 4000 - (BOOL)isOpaque {
4089 if (renderWidgetHostView_->use_core_animation_) 4001 if (renderWidgetHostView_->use_core_animation_)
4090 return YES; 4002 return YES;
4091 return [super isOpaque]; 4003 return [super isOpaque];
4092 } 4004 }
4093 4005
4094 @end 4006 @end
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | content/port/browser/render_widget_host_view_port.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698