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

Side by Side Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 10837330: Add a completion callback to gpuBenchmarking.beginSmoothScroll (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: virtual and todo note Created 8 years, 4 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_impl.h" 5 #include "content/browser/renderer_host/render_widget_host_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 1550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 // (OnMsgInputEventAck) method, but not on other platforms; using 1561 // (OnMsgInputEventAck) method, but not on other platforms; using
1562 // 'void' instead is just as safe (since NotificationSource 1562 // 'void' instead is just as safe (since NotificationSource
1563 // is not actually typesafe) and avoids this error. 1563 // is not actually typesafe) and avoids this error.
1564 NotificationService::current()->Notify( 1564 NotificationService::current()->Notify(
1565 NOTIFICATION_RENDER_WIDGET_HOST_DID_RECEIVE_INPUT_EVENT_ACK, 1565 NOTIFICATION_RENDER_WIDGET_HOST_DID_RECEIVE_INPUT_EVENT_ACK,
1566 Source<void>(this), 1566 Source<void>(this),
1567 Details<int>(&type)); 1567 Details<int>(&type));
1568 } 1568 }
1569 1569
1570 void RenderWidgetHostImpl::OnMsgBeginSmoothScroll( 1570 void RenderWidgetHostImpl::OnMsgBeginSmoothScroll(
1571 bool scroll_down, bool scroll_far) { 1571 int gesture_id, bool scroll_down, bool scroll_far) {
1572 if (!view_) 1572 if (!view_)
1573 return; 1573 return;
1574 active_smooth_scroll_gesture_.reset( 1574 active_smooth_scroll_gestures_.insert(
1575 view_->CreateSmoothScrollGesture(scroll_down, scroll_far)); 1575 std::make_pair(gesture_id,
1576 view_->CreateSmoothScrollGesture(
1577 scroll_down, scroll_far)));
1576 TickActiveSmoothScrollGesture(); 1578 TickActiveSmoothScrollGesture();
1577 } 1579 }
1578 1580
1579 void RenderWidgetHostImpl::TickActiveSmoothScrollGesture() { 1581 void RenderWidgetHostImpl::TickActiveSmoothScrollGesture() {
1580 if (!active_smooth_scroll_gesture_.get()) 1582 if (active_smooth_scroll_gestures_.size() == 0)
1581 return; 1583 return;
1582 1584
1583 TimeTicks now = TimeTicks::HighResNow(); 1585 TimeTicks now = TimeTicks::HighResNow();
1584 1586
1585 // Post the next tick right away so it is regular. 1587 // Post the next tick right away so it is regular.
1586 MessageLoop::current()->PostDelayedTask( 1588 MessageLoop::current()->PostDelayedTask(
1587 FROM_HERE, 1589 FROM_HERE,
1588 base::Bind(&RenderWidgetHostImpl::TickActiveSmoothScrollGesture, 1590 base::Bind(&RenderWidgetHostImpl::TickActiveSmoothScrollGesture,
1589 weak_factory_.GetWeakPtr()), 1591 weak_factory_.GetWeakPtr()),
1590 base::TimeDelta::FromMilliseconds(kSyntheticScrollMessageIntervalMs)); 1592 base::TimeDelta::FromMilliseconds(kSyntheticScrollMessageIntervalMs));
1591 1593
1594 // Separate ticking of gestures from sending their completion messages.
1595 std::vector<int> ids_that_are_done;
1596 for (SmoothScrollGestureMap::iterator it =
1597 active_smooth_scroll_gestures_.begin();
1598 it != active_smooth_scroll_gestures_.end();
1599 ++it) {
1592 1600
1593 bool active = active_smooth_scroll_gesture_->ForwardInputEvents(now, this); 1601 bool active = it->second->ForwardInputEvents(now, this);
1594 if (!active) { 1602 if (!active)
1595 active_smooth_scroll_gesture_.reset(); 1603 ids_that_are_done.push_back(it->first);
1596 // TODO(nduca): send "smooth scroll done" event to RenderWidget. 1604 }
1605
1606 // Delete completed gestures and send their completion event.
1607 for(size_t i = 0; i < ids_that_are_done.size(); i++) {
1608 int id = ids_that_are_done[i];
1609 SmoothScrollGestureMap::iterator it =
1610 active_smooth_scroll_gestures_.find(id);
1611 DCHECK(it != active_smooth_scroll_gestures_.end());
1612 active_smooth_scroll_gestures_.erase(it);
1613
1614 Send(new ViewMsg_SmoothScrollCompleted(routing_id_, id));
1597 } 1615 }
1598 } 1616 }
1599 1617
1600 void RenderWidgetHostImpl::OnMsgSelectRangeAck() { 1618 void RenderWidgetHostImpl::OnMsgSelectRangeAck() {
1601 select_range_pending_ = false; 1619 select_range_pending_ = false;
1602 if (next_selection_range_.get()) { 1620 if (next_selection_range_.get()) {
1603 scoped_ptr<SelectionRange> next(next_selection_range_.Pass()); 1621 scoped_ptr<SelectionRange> next(next_selection_range_.Pass());
1604 SelectRange(next->start, next->end); 1622 SelectRange(next->start, next->end);
1605 } 1623 }
1606 } 1624 }
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
2014 // indicate that no callback is in progress (i.e. without this line 2032 // indicate that no callback is in progress (i.e. without this line
2015 // DelayedAutoResized will not get called again). 2033 // DelayedAutoResized will not get called again).
2016 new_auto_size_.SetSize(0, 0); 2034 new_auto_size_.SetSize(0, 0);
2017 if (!should_auto_resize_) 2035 if (!should_auto_resize_)
2018 return; 2036 return;
2019 2037
2020 OnRenderAutoResized(new_size); 2038 OnRenderAutoResized(new_size);
2021 } 2039 }
2022 2040
2023 } // namespace content 2041 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_view_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698