summaryrefslogtreecommitdiffstats
path: root/cc/trees/proxy.h
Commit message (Collapse)AuthorAgeFilesLines
* cc: Add support for handling authoritative vsync intervalsimonhong2015-03-251-0/+3
| | | | | | | | | | | | | | | | | This is partial cl from https://codereview.chromium.org/775143003/ for easy reviewing. For now, authoritative vsync interval is handled by CompositorVsyncManager. It will not be used when BeginFrame scheduling is enabled on aura. Instead, it will be handled by scheduler. In the next cl, BeginFrame sheduling on aura(and ash) will be turned on. R=brianderson@chromium.org, mithro@mithis.com BUG=372086 TEST=cc_unittests Review URL: https://codereview.chromium.org/1005553004 Cr-Commit-Position: refs/heads/master@{#322125}
* Allow ui::Compositor to defer commits during tab-switchccameron2015-03-121-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Do this by using a ui::CompositorLock. For Mac, we don't care about making sure that the compositor doesn't hang waiting for renderer frames (because the browser compositor doesn't draw the UI), so disable the lock timeout. Also, re-create the browser compositor immediately after the tab is made visible. This way, if the DelegatedFrameHost has an un-evicted old frame, then that frame will be displayed immediately (and if not, the compositor will remain locked until a new frame is swapped in). Background: When we switched the ui::Compositor to use the scheduler (done in https://codereview.chromium.org/638653003), we started hitting issues where unexpected frames would flash on Mac during tab-switch. The reason for this is that, prior to the change, calling SetRootLayer(null) on the ui::Compositor would prevent it from drawing any new frames. The Mac was relying on this behavior to prevent transient frames from appearing. The transient frames appear during tab-switch on Mac because the compositor takes damage (as its root layer is changed) and also because the compositor is resized (among potentially other things). These frames do not actually appear on-screen (there are mechanisms to prevent this), but they waste valuable time during tab-switch (the browser allows only 50 msec for a new frame to appear on-screen before it flashes white, and this extra unused frame causes us to miss the deadline). With this patch, the frequency of the white flash during tab-switch is reduced substantially. BUG=463988 Review URL: https://codereview.chromium.org/996453002 Cr-Commit-Position: refs/heads/master@{#320241}
* cc: Remove unused tracing functions from LayerTreeHost(Impl).vmpstr2015-03-111-2/+0
| | | | | | | | | | | | This patch removes some of the functionality that is not used. These functions seem like they would be used in traces. However, other functions in the same classes are used instead. R=danakj, enne Review URL: https://codereview.chromium.org/992353002 Cr-Commit-Position: refs/heads/master@{#320011}
* cc: Commit directly to active tree when using single thread.danakj2015-02-171-0/+1
| | | | | | | | | | | | | | Skip making a pending tree, we'll want to wait for it anyways before we draw in single-thread mode. This should bring the single-thread impl-side painting in line with the legacy compositing mode when using a single thread (for the browser compositor). R=enne@chromium.org, vmpstr BUG=441012 Review URL: https://codereview.chromium.org/873473006 Cr-Commit-Position: refs/heads/master@{#316678}
* mechanical rename of base::debug -> base::trace_event for /ccssid2015-02-091-8/+2
| | | | | | | | | | | | | | This is the last stage of the trace_event directory restructuring. This is part of a set of 3 CLs which is moving tracing clients to use the new base::trace_debug namespace. See crrev.com/837303004 and the related bug for motivations. BUG=451032 TBR=nduca@chromium.org Review URL: https://codereview.chromium.org/879913002 Cr-Commit-Position: refs/heads/master@{#315335}
* Reland of Move tracing namespace from base::debug to base::trace_event.primiano2015-02-051-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Original CL: crrev.com/882673002 Reason for revert: Broke memory.fyi bot (crbug.com/455530) Reason for reland: The CL was renaming the tracing namespace and missed the rename of the tsan suppression (addressed here) Original description: After having transitioned all the tracing headers from base/debug/ to base/trace_event, this CL addresses the namespace move. In principle, this CL should only change the namespace of the base/trace_event files but the namespace used by the tracing clients. In order to achieve this, namespace aliases are appended to the trace_event headers, to make it so that clients can still refer to base::debug::TraceFoo, with that being aliased to base::trace_event::TraceFoo. The upcoming CLs will gradually migrate the clients to use the base::trace_event namespace and will remove the ns aliases. Unfortunately, this CL has also to update few tracing clients, in particular the ones having forward declarations. Forward declarations, in fact, cannot be aliased as the compiler sees them before the alias itself. See crrev.com/837303004 and the related bug for motivations and design doc. BUG=451032,455530 TBR=skyostil@chromium.org,jam@chromium.org,dsinclair@chromium.org,ssid@chromium.org Review URL: https://codereview.chromium.org/869043008 Cr-Commit-Position: refs/heads/master@{#314806}
* Revert of Move tracing namespace from base::debug to base::trace_event. ↵zhaoqin2015-02-051-8/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (patchset #7 id:120001 of https://codereview.chromium.org/882673002/) Reason for revert: broken Memory.FYI TSan bot. crbug.com/455530 Original issue's description: > Move tracing namespace from base::debug to base::trace_event. > > After having transitioned all the tracing headers from base/debug/ to > base/trace_event, this CL addresses the namespace move. > In principle, this CL should only change the namespace of the > base/trace_event files but the namespace used by the tracing clients. > In order to achieve this, namespace aliases are appended to the > trace_event headers, to make it so that clients can still refer to > base::debug::TraceFoo, with that being aliased to > base::trace_event::TraceFoo. > The upcoming CLs will gradually migrate the clients to use the > base::trace_event namespace and will remove the ns aliases. > Unfortunately, this CL has also to update few tracing clients, > in particular the ones having forward declarations. Forward > declarations, in fact, cannot be aliased as the compiler sees them > before the alias itself. > > See crrev.com/837303004 and the related bug for motivations and design doc. > > BUG=451032 > TBR=skyostil@chromium.org,jam@chromium.org > > Committed: https://crrev.com/97c5abba36f5ce473cd996fab74fbf5aa9bb5464 > Cr-Commit-Position: refs/heads/master@{#314657} TBR=dsinclair@chromium.org,picksi@chromium.org,primiano@chromium.org,skyostil@chromium.org,ssid@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=451032 Review URL: https://codereview.chromium.org/904573002 Cr-Commit-Position: refs/heads/master@{#314740}
* Move tracing namespace from base::debug to base::trace_event.ssid2015-02-041-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | After having transitioned all the tracing headers from base/debug/ to base/trace_event, this CL addresses the namespace move. In principle, this CL should only change the namespace of the base/trace_event files but the namespace used by the tracing clients. In order to achieve this, namespace aliases are appended to the trace_event headers, to make it so that clients can still refer to base::debug::TraceFoo, with that being aliased to base::trace_event::TraceFoo. The upcoming CLs will gradually migrate the clients to use the base::trace_event namespace and will remove the ns aliases. Unfortunately, this CL has also to update few tracing clients, in particular the ones having forward declarations. Forward declarations, in fact, cannot be aliased as the compiler sees them before the alias itself. See crrev.com/837303004 and the related bug for motivations and design doc. BUG=451032 TBR=skyostil@chromium.org,jam@chromium.org Review URL: https://codereview.chromium.org/882673002 Cr-Commit-Position: refs/heads/master@{#314657}
* base: Change DCHECK_IS_ON to a macro DCHECK_IS_ON().danakj2015-01-081-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | This ensures that if the header is not included, and a DCHECK is guarded by this check, that the file will fail to compile instead of silently compiling the DCHECK out. For example: #if DCHECK_IS_ON DCHECK(SomeThing()); #endif This example would be compiled out if DCHECK_IS_ON was not defined due to not including the logging.h header. Instead, this will fail to compile: #if DCHECK_IS_ON() DCHECK(SomeThing()); #endif R=thakis@chromium.org Review URL: https://codereview.chromium.org/842523002 Cr-Commit-Position: refs/heads/master@{#310626}
* Added ability to dynamically toggle frame throttling in the scheduler.bajones2015-01-061-0/+2
| | | | | | | | | | | | In order to allow Vsync to be toggled by dev tools we need to both set the swap interval to 0 on systems that support it and prevent the scheduler from throttling frames. BUG=437172 Review URL: https://codereview.chromium.org/811523002 Cr-Commit-Position: refs/heads/master@{#310139}
* cc: Add SetChildrenNeedBeginFrames() & SendBeginFramesToChildren()simonhong2014-11-211-0/+2
| | | | | | | | | | | | | | This cl is preparation for unified BeginFrame in cc layer. This implements handling of forwarding_begin_frames_to_children in cc. And this forwarding is not yet propagated to content layer. R=brianderson@chromium.org BUG=372086 TEST=cc_unittests Review URL: https://codereview.chromium.org/723713003 Cr-Commit-Position: refs/heads/master@{#305226}
* Make cc output surface creation asyncenne2014-09-251-0/+4
| | | | | | | | | | | | | | | | | | | | | As a part of making Android CompositorImpl use cc's scheduler and not post its own composite calls manually, cc needs to be able to handle asynchronous output surface creation. This change modifies CreateOutputSurface to instead be RequestNewOutputSurface, which the LayerTreeHostClient must respond to and call SetOutputSurface on the host with the new output surface once it is ready. Because the LayerTreeHostClient must now talk to the host as a part of output surface creation, a bunch of unit test code needed to be refactored to handle this. BUG=none Review URL: https://codereview.chromium.org/348093004 Cr-Commit-Position: refs/heads/master@{#296780}
* cc: Use correct message loop proxy in BlockingTaskRunnerskyostil2014-09-041-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | The compositor makes it possible to customize the message loop proxy both on the main and impl threads. However BlockingTaskRunner just uses base::MessageLoopProxy::current() directly and thus overrides this choice. Using the correct message loop proxy is important because clients of BlockingTaskRunner have an implicit dependency on the ordering of tasks posted to BlockingTaskRunner vs. all other tasks posted to the task runner for that same thread. This patch fixes the problem by removing the thread-local BlockingTaskRunner::current() instance in favor of an explicitly constructed instance which is given a specific SingleThreadTaskRunner to use. The resource provider is changed to pass a Proxy-owned blocking task runner to the clients which need one. BUG=391005 TEST=1. Apply https://codereview.chromium.org/363383002 2. out/Debug/chrome --disable-impl-side-painting --ignore-gpu-blacklist tools/perf/page_sets/tough_scheduling_cases/raf_canvas.html Review URL: https://codereview.chromium.org/485043003 Cr-Commit-Position: refs/heads/master@{#293353}
* Fix failing (flaky) LayerTreeHostTestLCDNotification test.danakj@chromium.org2014-08-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | This test failed with impl-side painting because PictureLayer did not skip commits caused by invalidating the layer during Update. Meanwhile, this CL has some changes that changed the flaky failures into always-failures. The change is to make the ThreadProxy::CommitPendingForTesting check not only if a main frame is in progress, but also if one will happen in the future. The failure was flaky because the commit would be requested but not happen immediately when impl-side painting was on due to activation (if the machine was suitably loaded at the time). I renamed CommitPendingForTesting to MainFrameWillHappenForTesting because "CommitPending" is a specific notion in the public API of the scheduler and I didn't want to confuse these two. R=ajuma, brianderson, enne BUG=402449, 397120 Review URL: https://codereview.chromium.org/462803002 Cr-Commit-Position: refs/heads/master@{#289165} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289165 0039d316-1c4b-4281-b951-d872f2087c98
* Add builders for tracing event's structural argumentsyurys@chromium.org2014-08-011-3/+7
| | | | | | | | | | | | | | | | The new classes allow building JSON-like structural arguments. Current implementation uses base::Value as backing store but that can be replaced in the future with something more efficient without changing client code. All clients of cc/debug/traced_value.h should eventually switch to use the new builders. BUG=361045 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=286849 R=alph@chromium.org, dsinclair@chromium.org, nduca@chromium.org, willchan@chromium.org Review URL: https://codereview.chromium.org/380763002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@286984 0039d316-1c4b-4281-b951-d872f2087c98
* Revert of Add builders for tracing event's structural arguments ↵erikchen@chromium.org2014-07-311-7/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | (https://codereview.chromium.org/380763002/) Reason for revert: linux ASAN errors. http://build.chromium.org/p/chromium.memory/builders/Linux%20ASan%20LSan%20Tests%20%281%29/builds/4493/steps/base_unittests/logs/stdio Original issue's description: > Add builders for tracing event's structural arguments > > The new classes allow building JSON-like structural arguments. Current implementation uses base::Value as backing store but that can be replaced in the future with something more efficient without changing client code. > > All clients of cc/debug/traced_value.h should eventually switch to use the new builders. > > BUG=361045 > > Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=286849 TBR=alph, caseq, dsinclair, nduca, willchan, yurys NOTREECHECKS=true NOTRY=true BUG=361045 Review URL: https://codereview.chromium.org/421183003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@286862 0039d316-1c4b-4281-b951-d872f2087c98
* Add builders for tracing event's structural argumentsyurys@chromium.org2014-07-311-3/+7
| | | | | | | | | | | | The new classes allow building JSON-like structural arguments. Current implementation uses base::Value as backing store but that can be replaced in the future with something more efficient without changing client code. All clients of cc/debug/traced_value.h should eventually switch to use the new builders. BUG=361045 Review URL: https://codereview.chromium.org/380763002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@286849 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Parameterize the main thread task runnerskyostil@chromium.org2014-07-181-2/+2
| | | | | | | | | | | | | | Make it possible for clients pass in a custom task runner to be used for posting compositor related work onto the main thread. This will be used for prioritizing compositor tasks by the Blink scheduler. Covered by existing tests. BUG=391005 Review URL: https://codereview.chromium.org/400773002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284103 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Disallow scroll offset animations when impl-scrolling isn't supportedajuma@chromium.org2014-07-031-0/+2
| | | | | | | | | | | | | SingleThreadProxy doesn't support directly changing scroll offsets on the impl layer tree (since it doesn't send scroll deltas from the impl side back to the main-thread side). This means that scroll offset animations should be disallowed by cc when using SingleThreadProxy. BUG=243871 Review URL: https://codereview.chromium.org/368883003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281140 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Compositor without MessageLoopProxyboliu@chromium.org2014-05-231-0/+2
| | | | | | | | | | | | | | | | | | | | | Support using single-threaded compositor with a single DelegatedRendererLayer on a thread that does not have a MessageLoop. First, Allow BlockingTaskRunner to be used on a thread that does not have a MessageLoopProxy. For these threads, all PostTask calls must be wrapped in CapturePostTasks. Use PlatformThreadId rather than MessageLoopProxy::BelongsToCurrent thread to check for current. Then fix DCHECK failures in Proxy to allow MessageLoopProxy to be NULL. Add tests to verify these code paths are indeed working. BUG=344087 Review URL: https://codereview.chromium.org/292493006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272473 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Remove CreateAndInitializeOutputSurface from the Proxy interface.danakj@chromium.org2014-05-201-5/+0
| | | | | | | | | | | | | | | | | Move it to be non-virtual methods on SingleThreadProxy and ThreadProxy. LayerTreeHost only needs to call it on the SingleThreadProxy, and make it do that before calling Composite() instead of having Composite() early out. Merge LTH::InitializeOutputSurfaceIfNeeded into LTH::Composite. NOTRY=true R=enne BUG=374287 Review URL: https://codereview.chromium.org/286293002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@271769 0039d316-1c4b-4281-b951-d872f2087c98
* Remove CompositeAndReadback from LayerTreeHost(Impl) and the Proxys.danakj@chromium.org2014-05-151-2/+0
| | | | | | | | | R=brianderson, enne BUG=251936 Review URL: https://codereview.chromium.org/279013002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270841 0039d316-1c4b-4281-b951-d872f2087c98
* Making BeginFrameArgs work with TRACE_EVENT system.mithro@mithis.com2014-05-101-1/+1
| | | | | | | | | | | | * Added ToValue() method on BeginFrameArgs. * Added a ToTrace method inside cc/traced_value.h for easy conversion, just do a ToTrace(XXX) of anything which has a ToValue() method. * Rename Scheduler::StateAsValue to AsValue so it works with above. BUG=371223 Review URL: https://codereview.chromium.org/270703004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269487 0039d316-1c4b-4281-b951-d872f2087c98
* Remove old texture path in TextureLayerpiman@chromium.org2014-04-101-2/+0
| | | | | | | | | | | This lets us also remove LayerTreeHost::AcquireLayerTextures and related scheduler things. BUG=337922 Review URL: https://codereview.chromium.org/227413011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262878 0039d316-1c4b-4281-b951-d872f2087c98
* cc: fix continuous paint modecaseq@chromium.org2014-04-031-0/+3
| | | | | | | | | | Request another commit after drawing layers if we're in continuous paint mode. BUG=346886 Review URL: https://codereview.chromium.org/181393002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@261340 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Change #if !defined(NDEBUG) to #if DCHECK_IS_ON.danakj@chromium.org2014-03-181-3/+3
| | | | | | | | | | | | | | | | | | Some places in cc enabled DCHECK code only when in a debug build since they added member variables to classes in order to perform their checks, and we could not check for DCHECK at compile time. Since we can now, we can guard these DCHECKS with DCHECK_IS_ON. Yay! DCHECK_IS_ON is always defined by base/logging.h. It is set to 1 when DCHECKS are enabled, and 0 otherwise. R=enne BUG=350462 Review URL: https://codereview.chromium.org/201843005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257761 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 245445 "Unifies LayerTreeHost::SetNeedsUpdateLayers and S..."mark@chromium.org2014-01-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Speculative. This may have caused flakiness on multiple bots. See bug 335582. > Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimate -- V2 > > [2/2] Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimate > > They basically do the same thing except that SetNeedsAnimate makes the next > commit non-cancellable. However there is really no reason why SetNeedsAnimate > need to enforce a commit even if no tiles are updated and no layer properties > changed. > > SetNeedsAnimate is thus merged into SetNeedsUpdateLayers. The proper use of > it is when there are potential layout/tile changes, we can use it to defer > calculation until the next frame. A commit will be scheduled but can be > cancelled if no updates are needed after calculation. > > This part of the patch changes code behavior slightly. > SingleThreadProxy::SetNeedsUpdateLayers was originally implemented as > RenderWidget::ScheduleComposite but now it is RenderWidget::ScheduleAnimation. > ThreadProxy::SetNeedsAnimate was non-cancellable but is now cancellable. > > [1/2] Cleanup RenderWidget::scheduleComposite/scheduleAnimation > > scheduleComposite has been renamed to ScheduleComposite as it is no longer > a part of WebWidgetClient API. > > scheduleAnimation has been renamed to ScheduleAnimation. The semantics is to > schedule a composite and also (potentially) animating WebWidget. > > A new WebWidgetClient API scheduleUpdate has been added, to replace the old > scheduleAnimation. The semantics is to notify the embedder that something in > the WebWidget may change in 0 seconds. (i.e. it is allowed to be called > during a redraw, in such case another redraw will be scheduled after frame > delay. > > This part of the patch should not change code behavior. > > BUG=316929 > R=danakj,jamesr,jochen > > Review URL: https://codereview.chromium.org/133263004 TBR=trchen@chromium.org BUG=335582 Review URL: https://codereview.chromium.org/141833002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245528 0039d316-1c4b-4281-b951-d872f2087c98
* Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimate -- V2trchen@chromium.org2014-01-171-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [2/2] Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimate They basically do the same thing except that SetNeedsAnimate makes the next commit non-cancellable. However there is really no reason why SetNeedsAnimate need to enforce a commit even if no tiles are updated and no layer properties changed. SetNeedsAnimate is thus merged into SetNeedsUpdateLayers. The proper use of it is when there are potential layout/tile changes, we can use it to defer calculation until the next frame. A commit will be scheduled but can be cancelled if no updates are needed after calculation. This part of the patch changes code behavior slightly. SingleThreadProxy::SetNeedsUpdateLayers was originally implemented as RenderWidget::ScheduleComposite but now it is RenderWidget::ScheduleAnimation. ThreadProxy::SetNeedsAnimate was non-cancellable but is now cancellable. [1/2] Cleanup RenderWidget::scheduleComposite/scheduleAnimation scheduleComposite has been renamed to ScheduleComposite as it is no longer a part of WebWidgetClient API. scheduleAnimation has been renamed to ScheduleAnimation. The semantics is to schedule a composite and also (potentially) animating WebWidget. A new WebWidgetClient API scheduleUpdate has been added, to replace the old scheduleAnimation. The semantics is to notify the embedder that something in the WebWidget may change in 0 seconds. (i.e. it is allowed to be called during a redraw, in such case another redraw will be scheduled after frame delay. This part of the patch should not change code behavior. BUG=316929 R=danakj,jamesr,jochen Review URL: https://codereview.chromium.org/133263004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245445 0039d316-1c4b-4281-b951-d872f2087c98
* Pass gfx::Rect and gfx::RectF by const ref.prashant.n@samsung.com2014-01-101-2/+2
| | | | | | | | | | | | | | | | | Avoid unneccessary copy of structures gfx::Rect & gfx::RectF by passing them by const ref rather than value. Any struct of size > 4 bytes should be passed by const ref. Passing by ref for these structs is faster than passing by value, especially when invoking function has multiple parameters. Pass by value creates unneccessary overhead which should be avoided. BUG=159273 Review URL: https://codereview.chromium.org/93663004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@244224 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Defer first OutputSurface creation until client is readysievers@google.com2013-12-191-1/+1
| | | | | | | | | | | | | | | | Remove the |first_output_surface| which was not used before the client signals ready. This allows the client to wait before creating a graphics context until the gpu thread and client channel are set up. BUG=270179,329739 R=danakj@chromium.org, jamesr@chromium.org, jochen@chromium.org Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=238458 Review URL: https://codereview.chromium.org/85693007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241897 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimate"loislo@chromium.org2013-12-111-0/+1
| | | | | | | | | | | | | | | This reverts commit 807f55ecb7ece39b25866405125d7e58b4bad9f2. It broke 33 layout tests. http://test-results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20Blink&tests=compositing/clip-change.html,compositing/geometry/foreground-offset-change.html,compositing/iframes/fixed-position-iframe.html,compositing/iframes/repaint-after-losing-scrollbars.html,compositing/iframes/scroll-grandchild-iframe.html,compositing/img-layer-grow.html,compositing/layer-creation/fixed-position-scroll.html,compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html,compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html,compositing/overflow/repaint-after-losing-scrollbars.html,compositing/repaint/newly-composited-on-scroll.html,compositing/repaint/newly-composited-repaint-rect.html,compositing/repaint/page-scale-repaint.html,compositing/repaint/requires-backing-repaint.html,compositing/repaint/shrink-layer.html,compositing/rtl/rtl-overflow-invalidation.html,compositing/video-frame-size-change.html,css3/filters/filter-change-repaint-composited.html,css3/filters/filter-change-repaint.html,css3/filters/filter-repaint-composited-fallback-crash.html,css3/filters/filter-repaint-composited-fallback.html,fast/canvas/webgl/webgl-composite-modes-repaint.html,fast/repaint/block-selection-gap-in-composited-layer.html,fast/sub-pixel/transformed-iframe-copy-on-scroll.html,virtual/gpu/compositedscrolling/overflow/do-not-paint-outline-into-composited-scrolling-contents.html,virtual/gpu/compositedscrolling/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html,virtual/gpu/compositedscrolling/overflow/repaint-after-losing-scrollbars.html,virtual/gpu/fast/canvas/canvas-composite-fill-repaint.html,virtual/gpu/fast/canvas/canvas-incremental-repaint-2.html,virtual/gpu/fast/canvas/canvas-incremental-repaint.html,virtual/gpu/fast/canvas/canvas-resize-after-paint-without-layout.html,virtual/gpu/fast/canvas/setWidthResetAfterForcedRender.html,virtual/gpu/fast/canvas/webgl/webgl-composite-modes-repaint.html BUG=none TBR=trchen@chromium.org Review URL: https://codereview.chromium.org/111893011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240038 0039d316-1c4b-4281-b951-d872f2087c98
* Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimatetrchen@chromium.org2013-12-111-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [2/2] Unifies LayerTreeHost::SetNeedsUpdateLayers and SetNeedsAnimate They basically do the same thing except that SetNeedsAnimate makes the next commit non-cancellable. However there is really no reason why SetNeedsAnimate need to enforce a commit even if no tiles are updated and no layer properties changed. SetNeedsAnimate is thus merged into SetNeedsUpdateLayers. The proper use of it is when there are potential layout/tile changes, we can use it to defer calculation until the next frame. A commit will be scheduled but can be cancelled if no updates are needed after calculation. This part of the patch changes code behavior slightly. SingleThreadProxy::SetNeedsUpdateLayers was originally implemented as RenderWidget::ScheduleComposite but now it is RenderWidget::ScheduleAnimation. ThreadProxy::SetNeedsAnimate was non-cancellable but is now cancellable. [1/2] Cleanup RenderWidget::scheduleComposite/scheduleAnimation scheduleComposite has been renamed to ScheduleComposite as it is no longer a part of WebWidgetClient API. scheduleAnimation has been renamed to ScheduleAnimation. The semantics is to schedule a composite and also (potentially) animating WebWidget. A new WebWidgetClient API scheduleUpdate has been added, to replace the old scheduleAnimation. The semantics is to notify the embedder that something in the WebWidget may change in 0 seconds. (i.e. it is allowed to be called during a redraw, in such case another redraw will be scheduled after frame delay. This part of the patch should not change code behavior. BUG=316929 R=danakj,jamesr,piman Review URL: https://codereview.chromium.org/68893031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240008 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 238458 "cc: Defer first OutputSurface creation until clie..."robliao@chromium.org2013-12-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | Reason: Candidate for Mac 10.6 and 10.7 Break - IOSurfaceReuse > cc: Defer first OutputSurface creation until client is ready > > Remove the |first_output_surface| which was not used before > the client signals ready. > This allows the client to wait before creating a graphics context > until the gpu thread and client channel are set up. > > BUG=270179 > R=danakj@chromium.org, jamesr@chromium.org, jochen@chromium.org > > Review URL: https://codereview.chromium.org/85693007 TBR=sievers@chromium.org Review URL: https://codereview.chromium.org/103163003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238470 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Defer first OutputSurface creation until client is readysievers@chromium.org2013-12-031-1/+1
| | | | | | | | | | | | | | Remove the |first_output_surface| which was not used before the client signals ready. This allows the client to wait before creating a graphics context until the gpu thread and client channel are set up. BUG=270179 R=danakj@chromium.org, jamesr@chromium.org, jochen@chromium.org Review URL: https://codereview.chromium.org/85693007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238458 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Allow all types of pending commits to throttle inputbrianderson@chromium.org2013-10-261-0/+1
| | | | | | | | | | | | | | | | | SetNeedsCommit is currently the only method that throttles input events. When SetNeedsUpdate was added to support abortable commits, it inadvertantly disabled input throttling for abortabe commits. SetNeesdAnimate has never throttled input events, but there is not reason to treat it differently. This patch throttles input for SetNeedsAnimate, SetNeedsUpdate and SetNeedsCommit now. BUG=305210 Review URL: https://codereview.chromium.org/37313003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231190 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Block commit on activate by setting a flag on LayerTreeHost.danakj@chromium.org2013-08-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the ThreadProxy recursively asks all layers in the tree if they should block the commit. This is problematic as when you remove a layer from a the tree, it may want to block the commit to get back resources from its active-tree impl-layer. Instead, have layers call SetNextCommitWaitsForActivation() when they want the next commit to block on activate. This way we only block commits that matter, not every commit when there's a texture layer present. And we can allow a layer to block the commit when it is leaving the tree. Tests: TextureLayerNoMailboxIsActivatedDuringCommit TextureLayerMailboxIsActivatedDuringCommit DelegatedFrameIsActivatedDuringCommit R=enne, piman BUG=277953 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=220418 Review URL: https://chromiumcodereview.appspot.com/23530003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220515 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 220418 "cc: Block commit on activate by setting a flag on..."danakj@chromium.org2013-08-301-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | http://build.chromium.org/p/chromium.linux/builders/Android%20Tests%20%28dbg%29/builds/14025/steps/cc_unittests/logs/stdio#failure7 > cc: Block commit on activate by setting a flag on LayerTreeHost. > > Currently the ThreadProxy recursively asks all layers in the tree if > they should block the commit. This is problematic as when you remove > a layer from a the tree, it may want to block the commit to get back > resources from its active-tree impl-layer. > > Instead, have layers call SetNextCommitWaitsForActivation() when they > want the next commit to block on activate. This way we only block > commits that matter, not every commit when there's a texture layer > present. And we can allow a layer to block the commit when it is > leaving the tree. > > Tests: > TextureLayerNoMailboxIsActivatedDuringCommit > TextureLayerMailboxIsActivatedDuringCommit > DelegatedFrameIsActivatedDuringCommit > > R=enne, piman > BUG=277953 > > Review URL: https://chromiumcodereview.appspot.com/23530003 TBR=danakj@chromium.org Review URL: https://codereview.chromium.org/23702010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220455 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Block commit on activate by setting a flag on LayerTreeHost.danakj@chromium.org2013-08-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Currently the ThreadProxy recursively asks all layers in the tree if they should block the commit. This is problematic as when you remove a layer from a the tree, it may want to block the commit to get back resources from its active-tree impl-layer. Instead, have layers call SetNextCommitWaitsForActivation() when they want the next commit to block on activate. This way we only block commits that matter, not every commit when there's a texture layer present. And we can allow a layer to block the commit when it is leaving the tree. Tests: TextureLayerNoMailboxIsActivatedDuringCommit TextureLayerMailboxIsActivatedDuringCommit DelegatedFrameIsActivatedDuringCommit R=enne, piman BUG=277953 Review URL: https://chromiumcodereview.appspot.com/23530003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220418 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Add trace events for the Scheduler states.brianderson@chromium.org2013-08-211-1/+1
| | | | | | | | | | | | | | With upcoming scheduler changes, it'll be easier to understand the scheduler if there's a tracing option for the scheduler state. Given how much state there is to trace, a new disabled-by-default tracing category is used called "cc.debug.scheduler". BUG=276637 Review URL: https://chromiumcodereview.appspot.com/22802018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218686 0039d316-1c4b-4281-b951-d872f2087c98
* Notify the compositor when input is throttledenne@chromium.org2013-07-311-0/+2
| | | | | | | | | | | | | | | | | If input is prevented from reaching the compositor thread, then the compositor should switch immediately into "new content takes priority" mode rather than waiting 250ms for smoothness to time out. If in the future we ever throttle begin frame (or hold them off indefinitely) when in prefer smoothness mode, this safety check will help us from delays when need a commit before more input will be sent. R=jamesr@chromium.org, nduca@chromium.org BUG=none Review URL: https://chromiumcodereview.appspot.com/19313003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214792 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Allow the main thread to cancel commitsenne@chromium.org2013-07-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a new SetNeedsUpdateLayers that triggers the commit flow, but is abortable if update layers doesn't actually make any changes. This allows the main thread to abort a begin frame. This happens in the case of scroll updates from the compositor thread or invalidations. There was previously an abort begin frame call for when a visibility message and a begin frame message were posted simultaneously, but it incorrectly applied the scrolls and scales without informing the compositor thread that these had already been consumed. To fix this, the abort message passes back a boolean about whether or not the commit was aborted (and needed to be sent again) or was handled (and the scrolls and scales processed). To avoid a deluge of begin frames (in the commit sense) from the scheduler, the scheduler has been adjusted to wait until the next begin frame (in the vsync signal sense) so that these calls can be throttled. Otherwise, the scheduler will just keep trying to begin frame. R=brianderson@chromium.org, danakj@chromium.org BUG=256381 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=213338 Review URL: https://chromiumcodereview.appspot.com/19106007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214314 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 213338 "cc: Allow the main thread to cancel commits"jochen@chromium.org2013-07-241-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Broke WebViewInteractiveTest.EditCommandsNoMenu on Mac [1288:27139:0723/221703:FATAL:layer_impl.cc(286)] Check failed: TotalScrollOffset().y() <= max_scroll_offset_.y() (62 vs. 47) > cc: Allow the main thread to cancel commits > > Add a new SetNeedsUpdateLayers that triggers the commit flow, but is > abortable if update layers doesn't actually make any changes. This > allows the main thread to abort a begin frame. This happens in the case > of scroll updates from the compositor thread or invalidations. > > There was previously an abort begin frame call for when a visibility > message and a begin frame message were posted simultaneously, but it > incorrectly applied the scrolls and scales without informing the > compositor thread that these had already been consumed. To fix this, > the abort message passes back a boolean about whether or not the > commit was aborted (and needed to be sent again) or was handled > (and the scrolls and scales processed). > > To avoid a deluge of begin frames (in the commit sense) from the > scheduler, the scheduler has been adjusted to wait until the next begin > frame (in the vsync signal sense) so that these calls can be throttled. > Otherwise, the scheduler will just keep trying to begin frame. > > R=brianderson@chromium.org, danakj@chromium.org > BUG=256381 > > Review URL: https://chromiumcodereview.appspot.com/19106007 TBR=enne@chromium.org Review URL: https://codereview.chromium.org/19519019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213355 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Allow the main thread to cancel commitsenne@chromium.org2013-07-241-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add a new SetNeedsUpdateLayers that triggers the commit flow, but is abortable if update layers doesn't actually make any changes. This allows the main thread to abort a begin frame. This happens in the case of scroll updates from the compositor thread or invalidations. There was previously an abort begin frame call for when a visibility message and a begin frame message were posted simultaneously, but it incorrectly applied the scrolls and scales without informing the compositor thread that these had already been consumed. To fix this, the abort message passes back a boolean about whether or not the commit was aborted (and needed to be sent again) or was handled (and the scrolls and scales processed). To avoid a deluge of begin frames (in the commit sense) from the scheduler, the scheduler has been adjusted to wait until the next begin frame (in the vsync signal sense) so that these calls can be throttled. Otherwise, the scheduler will just keep trying to begin frame. R=brianderson@chromium.org, danakj@chromium.org BUG=256381 Review URL: https://chromiumcodereview.appspot.com/19106007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213338 0039d316-1c4b-4281-b951-d872f2087c98
* Remove old CapturePicture path from content and ccboliu@chromium.org2013-07-151-3/+0
| | | | | | | | | | | Browser compositor path has long since been removed. This is just removing dead code now. BUG= Review URL: https://chromiumcodereview.appspot.com/19115005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@211711 0039d316-1c4b-4281-b951-d872f2087c98
* Use a direct include of time headers in cc/.avi@chromium.org2013-06-271-1/+1
| | | | | | | | | | BUG=254986 TEST=none TBR=ben@chromium.org Review URL: https://chromiumcodereview.appspot.com/18120002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209027 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Remove cc::Thread and cc::ThreadImpl.danakj@chromium.org2013-06-201-10/+9
| | | | | | | | | | | | | These classes are replaced by using base::SingleThreadTaskRunner directly. R=piman,jamesr BUG=251134 Depends on: https://codereview.chromium.org/17362002/ Review URL: https://chromiumcodereview.appspot.com/17114008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207491 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Emulate BeginFrame in OutputSurfaces that don't support it nativelybrianderson@chromium.org2013-06-181-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | Relanding again. This time, the proactive SetNeedsBeginFrame is broken out explicitly with logic to workaround crbug 249806 and to avoid expensive redraws with the synchronous renderer. This includes two small fixes for the original version of this patch that broke software compositing and WebView. This will allow us to avoid having two different code paths in the Scheduler. It also allows us to more easily remove the VSyncTimeSource and FrameRateController from the Scheduler. This patch instantiates the FrameRateController inside of OutputSurface for now, but the FrameRateController could be removed in future patches. BUG=245920 BUG=243497 BUG=249806 TBR=nduca@chromium.org,sievers@chromium.org,kbr@chromium.org Review URL: https://chromiumcodereview.appspot.com/17353002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206955 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 206020 "cc: Emulate BeginFrame in OutputSurfaces that don..."reveman@google.com2013-06-171-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is causing pre-rendered pages to not load on android: crbug.com/249806 > cc: Emulate BeginFrame in OutputSurfaces that don't support it natively > > This includes two small fixes for the original version of this > patch that broke software compositing and WebView. > > This will allow us to avoid having two different code paths > in the Scheduler. It also allows us to more easily remove the > VSyncTimeSource and FrameRateController from the Scheduler. > > This patch instantiates the FrameRateController inside of > OutputSurface for now, but the FrameRateController could be > removed in future patches. > > BUG=245920 > BUG=243497 > TBR=nduca@chromium.org,sievers@chromium.org,kbr@chromium.org > > Review URL: https://chromiumcodereview.appspot.com/16833003 TBR=brianderson@chromium.org Review URL: https://codereview.chromium.org/17204002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206655 0039d316-1c4b-4281-b951-d872f2087c98
* cc: Emulate BeginFrame in OutputSurfaces that don't support it nativelybrianderson@chromium.org2013-06-131-0/+3
| | | | | | | | | | | | | | | | | | | | | This includes two small fixes for the original version of this patch that broke software compositing and WebView. This will allow us to avoid having two different code paths in the Scheduler. It also allows us to more easily remove the VSyncTimeSource and FrameRateController from the Scheduler. This patch instantiates the FrameRateController inside of OutputSurface for now, but the FrameRateController could be removed in future patches. BUG=245920 BUG=243497 TBR=nduca@chromium.org,sievers@chromium.org,kbr@chromium.org Review URL: https://chromiumcodereview.appspot.com/16833003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206020 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 205750 "cc: Emulate BeginFrame in OutputSurfaces that don..."skaslev@chromium.org2013-06-121-3/+0
| | | | | | | | | | | | | | | | | | | | | | | > cc: Emulate BeginFrame in OutputSurfaces that don't support it natively > > This will allow us to avoid having two different code paths > in the Scheduler. It also allows us to more easily remove the > VSyncTimeSource and FrameRateController from the Scheduler. > > This patch instantiates the FrameRateController inside of > OutputSurface for now, but the FrameRateController could be > removed in future patches. > > BUG=245920 > BUG=243497 > > Review URL: https://chromiumcodereview.appspot.com/15836005 TBR=brianderson@chromium.org Review URL: https://codereview.chromium.org/16679010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205838 0039d316-1c4b-4281-b951-d872f2087c98