summaryrefslogtreecommitdiffstats
path: root/content/common/gpu/gpu_memory_manager.h
Commit message (Collapse)AuthorAgeFilesLines
* Increase the minimum GPU memory limit on Macccameron@chromium.org2013-12-191-0/+3
| | | | | | | | | | | | | | | | | | | | | | Increase the minimum GPU memory limit for a renderer from 64MB to 128MB. The Mac's memory policy will not actually use the full amount of memory, unless the page requires that much to render content on the screen (in which case, jank due to paging is better than missing content). Make the prioritized resource manager more aggressively free unused textures when the memory policy indicates that GPU memory should be used sparingly. Without this change, the amount of memory spent holding on to spare textures to recycle would double. Move the definition of the priority cutoff to the same location as all other platform dependent variables. BUG=318877 Review URL: https://codereview.chromium.org/98073011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@241769 0039d316-1c4b-4281-b951-d872f2087c98
* Report GPU memory usage to DevToolsalph@chromium.org2013-12-111-0/+2
| | | | | | | | | | Extract GPU memory usage statistics and pass it to DevTools. BUG=326497 Review URL: https://codereview.chromium.org/110883005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240084 0039d316-1c4b-4281-b951-d872f2087c98
* Do not give GPU memory to backgrounded compositors.ccameron@chromium.org2013-11-011-8/+0
| | | | | | | | | | | | | | | | | | | | This has already been disabled on all platforms except Windows and Chrome OS to be more conservative about GPU memory. All platforms are moving to a delegated renderer where, if keeping around resources for a fast tab-switch is desired, it can be accomplished by not releasing those resources in the browser process. This feature was originally requested in crbug.com/134750. Also remove the infrastructure for preserving backbuffers of backgrounded renderers. This feature was never enabled. BUG=276559 Review URL: https://codereview.chromium.org/53633003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232324 0039d316-1c4b-4281-b951-d872f2087c98
* Move memory allocation/stats structs to gpu:: and remove bazillion copiesjamesr@chromium.org2013-10-291-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This moves the memory allocation / stats structs from content to gpu:: and eliminates many redundant copies of this information in different parts of the stack. This also moves the stats sending and allocation callbacks to gpu::ContextSupport / gpu::GpuControl to get rid of the bounce through WebKit::WebGraphicsContext3D. The new flow for cc to register for memory allocation changes and pass stats to the manager is this: cc:: registers for MemoryAllocationChanged callbacks and sends stats via the gpu::ContextSupport interface. Memory allocations are represented by a gpu::MemoryAllocation struct and memory statistics are sent in a gpu::ManagedMemoryStats struct. The implementation of gpu::ContextSupport (gpu::gles2::GLES2Implementation) forwards the calls to gpu::GpuControl. content::CommandBufferProxyImpl's implementation of these maps the calls to content IPCs that drive the memory manager implementation. This patch gets rid of the following things: *) WebKit::WebGraphicsMemory(Allocation|Stats) go away. These were used only because cc was not able to depend on the previous locations of the allocation/stats structs in content::. Now that these structs are in gpu::, the compositor (which is the only thing using these) can see them directly *) WebGraphicsContext3D::sendManagedMemoryStatsCHROMIUM / setMemoryAllocationChangedCallbackCHROMIUM go away. *) cc:ManagedMemoryPolicy's cutoff fields are now gpu::MemoryAllocation::PriorityCutoff enums instead of an (inconsistently named) copy. *) GpuMemoryAllocationForBrowser goes away and is managed directly in content. gpu::GpuMemoryAllocationForRenderer is renamed to just gpu::MemoryAllocation *) Many proxies and converters go away. cc::ManagedMemoryPolicy sticks around in this patch, even though it's largely the same as gpu::MemoryAllocation, since it's sometimes used by code that doesn't go through the gpu memory allocation path - such as android_webview - and it has some additional state (num_resource_limit) that's not applicable to a general gpu::MemoryAllocation. Chris tells me this struct is due for simplification as well, so maybe it'll make sense to fold it in in a future patch. Diffstat: 53 files changed, 345 insertions(+), 713 deletions(-) BUG=181120 R=piman,ccameron Review URL: https://codereview.chromium.org/45243002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231527 0039d316-1c4b-4281-b951-d872f2087c98
* Destroy GLX windows when they are backgroundedccameron@chromium.org2013-09-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | Because GLX windows cannot be destroyed separately from their X windows on all platforms, create a separate child X window to use with GLX. Destroy this child X window when the backbuffer for the window is no longer needed. Because the GL surface may need to be made current while its backbuffer is destroyed (e.g, to destroy GL resources for a backgrounded tab), create a dummy 1x1 GL surface which is never destroyed and can always be made current. Because the child X window created will cover its parent, create an event listener to forward expose events from the child window to the parent, so that the parent can know to repaint. BUG=145600 Review URL: https://chromiumcodereview.appspot.com/23452026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223148 0039d316-1c4b-4281-b951-d872f2087c98
* Fix bug in GPUMemoryManager::allow_nonvisible_memory_ setting.aelias@chromium.org2013-08-211-0/+2
| | | | | | | | | | | | | | | The complicated policy resulted in nonvisible memory being nonzero under some conditions despite this setting. Move the zero setting to where it will always work. New test GpuMemoryManagerTest.AllowNonvisibleMemory. NOTRY=true BUG=276721 Review URL: https://chromiumcodereview.appspot.com/22886007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218783 0039d316-1c4b-4281-b951-d872f2087c98
* Rename base/hash_tables to base/containers/hash_tables.brettw@chromium.org2013-06-111-1/+1
| | | | | | | | | | | Remove forwarding header BUG= R=avi@chromium.org Review URL: https://codereview.chromium.org/16667019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205584 0039d316-1c4b-4281-b951-d872f2087c98
* Don't give memory to backgrounded tabs on OS X.ccameron@chromium.org2013-05-011-0/+3
| | | | | | | | | | | | The extra memory usage causes system VA space usage when using FCM, and also causes system stability issues. BUG= NOTRY=True Review URL: https://chromiumcodereview.appspot.com/14681003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@197562 0039d316-1c4b-4281-b951-d872f2087c98
* Delete memory manager dead code.ccameron@chromium.org2013-03-121-41/+6
| | | | | | | | | | | | | | | | | There have existed two paths in the memory manager for a few months -- the old path which uniformly distributes all memory across all visible renderers, and the new path which takes into account the needs of each renderer. The transition was made from the old policy to the new policy quite a while ago, so we can safely get rid of the old policy. BUG=150883 Review URL: https://chromiumcodereview.appspot.com/12475002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@187678 0039d316-1c4b-4281-b951-d872f2087c98
* gpu: Remove viewport from Android memory limit.epenner@chromium.org2013-02-141-2/+0
| | | | | | | | | | | | | | TBR=ccameron@chromium.org TBR=piman@chromium.org BUG=175238 NOTRY=true No try since this has passed tests several times but is stuck. Review URL: https://chromiumcodereview.appspot.com/12269002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182562 0039d316-1c4b-4281-b951-d872f2087c98
* Only allow one frontbuffer on Android.ccameron@chromium.org2013-02-141-2/+2
| | | | | | | | | | | The previous patch ahd this reversed. BUG=174572 TBR=epenner,piman Review URL: https://codereview.chromium.org/12256026 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182355 0039d316-1c4b-4281-b951-d872f2087c98
* Only allow one frontbuffer on Androidccameron@chromium.org2013-02-131-0/+4
| | | | | | | | | | | | As far as everyone remembers, M18 didn't keep around anything more than 1 frontbuffer, so this restores this behavior. BUG=174572 R=epenner Review URL: https://codereview.chromium.org/12218126 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182092 0039d316-1c4b-4281-b951-d872f2087c98
* Distribute extra memory evenly among visible clientsccameron@chromium.org2013-02-131-0/+1
| | | | | | | | | | | | | | | | | | | | | After computing all clients' memory budgets, take any extra memory left over and distribute it amongst the visible clients (so that, if their memory requirments suddenly jump, they don't need to wait for a roundtrip to the GPU process to get extra memory). Disallow keeping around backgrounded tabs' contents on Android, to keep the maximum for the main tab. Explicitly limit the memory to use for prepainting by specifying NiceToHave on Mac to avoid performance problems. BUG=175125 TBR=nduca, piman Review URL: https://codereview.chromium.org/12212143 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182083 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 181950 - Broke content_unittests on Androidsergeyu@chromium.org2013-02-121-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | > Distribute extra memory evenly among visible clients > > After computing all clients' memory budgets, take any > extra memory left over and distribute it amongst the > visible clients (so that, if their memory requirments > suddenly jump, they don't need to wait for a roundtrip > to the GPU process to get extra memory). > > Disallow keeping around backgrounded tabs' contents on > Android, to keep the maximum for the main tab. > > Explicitly limit the memory to use for prepainting by > specifying NiceToHave on Mac to avoid performance problems. > > BUG=175125 > > Review URL: https://codereview.chromium.org/12226082 TBR=ccameron@chromium.org Review URL: https://codereview.chromium.org/12208134 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@181962 0039d316-1c4b-4281-b951-d872f2087c98
* Distribute extra memory evenly among visible clientsccameron@chromium.org2013-02-121-0/+1
| | | | | | | | | | | | | | | | | | | | After computing all clients' memory budgets, take any extra memory left over and distribute it amongst the visible clients (so that, if their memory requirments suddenly jump, they don't need to wait for a roundtrip to the GPU process to get extra memory). Disallow keeping around backgrounded tabs' contents on Android, to keep the maximum for the main tab. Explicitly limit the memory to use for prepainting by specifying NiceToHave on Mac to avoid performance problems. BUG=175125 Review URL: https://codereview.chromium.org/12226082 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@181950 0039d316-1c4b-4281-b951-d872f2087c98
* Add unit tests for nonuniform GPU memmgr policy.ccameron@chromium.org2013-02-011-5/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | Add a default memory allocation level for clients that have not yet sent memory usage levels to the manager. This default is currently set to equal the minimum, but the minimum will be lowered substantially in the future (and the default will stay higher, to avoid a low-res flicker at load). Change GetMinimumClientAllocation to always use a value set during initialization instead of having a separate override flag. Fix a comparison bug that caused no clients to retain their memory when made nonvisible. Make clients that are nonvisible and have had their memory evicted not be given a budget that gives them back their memory until they are made visible again. This prevents situations where we burn resources painting-then-freeing resources for backgrounded clients. BUG=168413 Review URL: https://chromiumcodereview.appspot.com/12087078 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180054 0039d316-1c4b-4281-b951-d872f2087c98
* Use uint64 instead of size_t in GpuMemoryManagerccameron@chromium.org2013-01-311-36/+36
| | | | | | | | | | | | | | There are two reasons for this. Most pressing is that this is skating near the edge of overflow (especially where we multiply things by 9/8). Second is that it is indeed possible to have a Gpu with more than 4GB of VRAM accessible even to a 32-bit process. BUG=168413 Review URL: https://chromiumcodereview.appspot.com/12091051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179966 0039d316-1c4b-4281-b951-d872f2087c98
* Add non-uniform memory management policy for impl-side painting.ccameron@chromium.org2013-01-241-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The policy is as follows: Make note of three allocation levels -- nice-to-have (which includes substantial prepainting for compositors), required (which is just what is visible for compositors), and minimum (a constant). If the nice-to-have level for all clients can fit in memory, then set the allocation for the clients to be their nice-to-have level. If the nice-to-have level for all clients cannot fit in memory, but the required level can, then impose a cap on the nice-to-have memory that each client can have. This cap will affect only the clients that have the most nice-to-have-but-not-required memory first, and as it is lowered it will impact all clients, until only the required memory level is allowed. Similarly, if the required level for all clients cannot fit in memory, then impose a cap on the required memory that will first impact the clients with the highest requirements. A discussion of the rationale for the policy is as follows: In the case where there is one particularly content-heavy visible tab and a few content-light visible tabs. This will cause content to be dropped (or made low-res) only in the content-heavy tab first, so one pathologically expensive tab won't harm the rendering of the other tabs. If all visible tabs have similar requirements, then the treatment will be more uniform. Note that none of this code is enabled yet. This new policy will be used with impl-side painting, and hopefully will replace the current policy (which distributes memory uniformly), but both are existing side-by-side to be conservative. BUG=168413 Review URL: https://chromiumcodereview.appspot.com/11948002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178553 0039d316-1c4b-4281-b951-d872f2087c98
* Add calls to EnsureGPUMemoryAvailable into GLES2DecoderImplgman@chromium.org2013-01-231-0/+1
| | | | | | | | | BUG=171002 Review URL: https://chromiumcodereview.appspot.com/12017032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178265 0039d316-1c4b-4281-b951-d872f2087c98
* Make names consistent in GpuMemoryManager.ccameron@chromium.org2013-01-161-10/+10
| | | | | | | | | | | | Prefer nonvisible to backgrounded, client to tab, nicetohave to nice_to_have, and allocation to budget. BUG=168413 Review URL: https://chromiumcodereview.appspot.com/11944002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177244 0039d316-1c4b-4281-b951-d872f2087c98
* Update GPU memory manager policy for impl-side paintingccameron@chromium.org2013-01-121-1/+15
| | | | | | | | | | | | | | | | | | | | | | | This hides a new memory management policy behind the flag use_nonuniform_memory_policy_. The flag is not hooked up to checking cc::switches::kEnableImplSidePainting because the hope is to enable the new policy everywhere and just delete the old policy, but the old policy is being left around for now to be conservative. The new policy is to take take the estimate of memory usage from the compositor, pad it a bit, and send that back as the budget to that compositor (in contrast to the policy of distributing memory evenly across all tabs). There is a TODO left for handling the situation where we do not have enough space for all visible compositors, where we'll have to do some math. BUG=168413 Review URL: https://chromiumcodereview.appspot.com/11827066 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176541 0039d316-1c4b-4281-b951-d872f2087c98
* Remove some usage of the ENABLE_GPU macro.apatrick@chromium.org2013-01-041-4/+0
| | | | | | | | At this point it is always defined. Review URL: https://chromiumcodereview.appspot.com/11722024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175094 0039d316-1c4b-4281-b951-d872f2087c98
* Account for unmanaged (e.g, WebGL) use in memory managerccameron@chromium.org2013-01-021-0/+24
| | | | | | | | | | Set an interval of memory for unmanaged memory, and when memory usage leaves this interval, re-assign GPU memory budgets. Use this interval approach to avoid thrashing minute changes in policy. BUG=167693 Review URL: https://chromiumcodereview.appspot.com/11677008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174864 0039d316-1c4b-4281-b951-d872f2087c98
* Move GpuMemoryManager::ClientState structure to its own class.ccameron@chromium.org2012-12-241-96/+30
| | | | | | | | | | | | | Also clean up initialization path so that the GpuMemoryManager returns a GpuMemoryManagerClientState, and destroying that structure deletes the client. BUG=164947 Review URL: https://chromiumcodereview.appspot.com/11571075 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@174591 0039d316-1c4b-4281-b951-d872f2087c98
* Use a queue instead of timestamps to sort most-recently-used clientsccameron@chromium.org2012-12-191-28/+39
| | | | | | | | | | | | | | | | | | | | | | Use a most-recently-used queue to sort the GPU memory manager clients. Previously we used timestamps, but this had issues with unit testing because of timer resolution. Maintain three lists of clients -- visible, non-visible, and non-surface clients. The visible and non-visible lists are in most-recently-used order. This removes the need to create a separate vector of the clients and sort that vector at every manage call. Store whether or not a share group has any non-hibernated clients directly in the share group's memory tracking group, so we don't have to construct an explicit set of the non-hibernated clients. BUG=164947 Review URL: https://chromiumcodereview.appspot.com/11645013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173999 0039d316-1c4b-4281-b951-d872f2087c98
* Track managed memory usage in the command buffer.ccameron@chromium.org2012-12-131-2/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | This adds infrastructure necessary to support tracking which allocations are through the compositor (or, more generally, any managed allocator that the GPU memory manager affect) and allocations that are not (e.g, WebGL). This is part of a scheme which will add a GL extension where the compositor can mark a texture as being managed by a call to glTexParameteri. This information had previously been tracked by an IPC being sent by the compositor to the GPU process informing it of the managed memory usage (in addition to the usage required for all visible content, etc). This had the two problems. First, the information was not accurate -- the data sent about managed allocations to the GPU memory manager would always lag the actual allocations. Second, these IPCs were expensive and needed to be throttled. The more we throttle the IPCs, the less accurate the information would become, making the GPU memory manager's behavior less precise and predictable. BUG=164947 Review URL: https://chromiumcodereview.appspot.com/11516014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172754 0039d316-1c4b-4281-b951-d872f2087c98
* Add UMA histograms for GPU memory usage at GPU process exit.ccameron@chromium.org2012-12-111-1/+9
| | | | | | | | | BUG=159648 Review URL: https://chromiumcodereview.appspot.com/11280204 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172212 0039d316-1c4b-4281-b951-d872f2087c98
* Let backgrounded tabs to keep their textures.ccameron@chromium.org2012-11-091-2/+20
| | | | | | | | | | | | | | | | | | | | Allow up to one quarter of the available video memory to be used for backgrounded tabs. Backgrounded textures have lower priority than anything else, so scrolling around will cause them to be evicted. The limit of one quarter is to avoid being anti-social to other processes that may be using the GPU. Also fix a bug where setting a client to be visible didn't correctly update the client's timestamp. Add unit tests for the added functionality. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11359122 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166992 0039d316-1c4b-4281-b951-d872f2087c98
* Restructure memory management function inccameron@chromium.org2012-11-071-4/+7
| | | | | | | | | | | | preparation for allowing backgrounded tabs to have memory. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11369115 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166413 0039d316-1c4b-4281-b951-d872f2087c98
* Track the total amount of managed memory allocated by all clients.ccameron@chromium.org2012-11-071-47/+14
| | | | | | | | | | | | | | Remove tracking of the historical maximum, since it wasn't used. Also move the ifdef-heavy const function out of the header and into the source file. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11366082 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166393 0039d316-1c4b-4281-b951-d872f2087c98
* Clean up the interface between GpuMemoryManager and GpuCommandBufferStub.ccameron@chromium.org2012-11-061-24/+111
| | | | | | | | | | | | Change the meaning of GPU memory manager client to a stub. Maintain a list of stubs in the GPU memory manager. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11363075 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166197 0039d316-1c4b-4281-b951-d872f2087c98
* Clean up memory manager's context tracking structures.ccameron@chromium.org2012-11-021-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This change should not change any behavior. Use GetMemoryTracker and comparisons instead of IsInSameContextShareGroup to determine if two stubs should be counted as being in the same group. Simplify the logic in GpuMemoryManager::Manage() use an O(log n) lookup based on memory tracker instead of an O(n) lookup based on stub context group to determine if two stubs are in the same context group. Fix a number of places in the memory manager unit test where "is in the same context group as" was assumed not to be an equivalence relation (now that the lookup is based on memory tracker, it is an equivalence relation). Add memory tracking to the memory manager unit test (so that we can simulate unmanaged memory, e.g, WebGL, entering the mix). Clean up the memory manager unit test to use a common base class for the two stub classes. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11361050 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165617 0039d316-1c4b-4281-b951-d872f2087c98
* Adjust gpu memory manager limits for Android for high-res tablets. ccameron@chromium.org2012-11-011-8/+18
| | | | | | | | | | | | | | | | | | | | | We could return the limit from the Android egl context (since it knows its surface size), but it doesn't quite fit with the code in UpdateAvailableGpuMemory, and would be coupled to the other logic in there, so I decided to keep all the code in one place. This also converges behavior and tests. The behavior is the same now, minus calculating the total memory available which has a new test. Since only foreground tabs/windows are given memory this should work fine. However, we will need to be careful when enabling partial evictions of background tabs, as Android assumes background tabs are fully evicted. BUG=158465 Review URL: https://chromiumcodereview.appspot.com/11360047 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165544 0039d316-1c4b-4281-b951-d872f2087c98
* Change memory manager policies to reflect renderers dropccameron@chromium.org2012-11-011-20/+0
| | | | | | | | | | | | | | | | their contents when visibility changes, so the GPU memory manager doesn't need to send them redundant messages to do so. Move statistics tracking for testing out of the manager and into the testing files. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11359016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@165441 0039d316-1c4b-4281-b951-d872f2087c98
* Update GPU memory management IPCs. Add messages for renderer GPU memory usageccameron@chromium.org2012-10-301-1/+0
| | | | | | | | | | | statistics. Add new policy fields to the GPU memory allocation structure. BUG=134750 Review URL: https://chromiumcodereview.appspot.com/11263052 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164830 0039d316-1c4b-4281-b951-d872f2087c98
* Move a bunch of code in content\common (as well as a few left in renderer) ↵jam@chromium.org2012-10-221-3/+9
| | | | | | | | to the content namespace. Review URL: https://codereview.chromium.org/11227033 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163359 0039d316-1c4b-4281-b951-d872f2087c98
* Actually system GPU memory values to compute memory budget.ccameron@chromium.org2012-10-051-3/+28
| | | | | | | | | | | | | | | Previous behavior was to artifically constrain everything to the minimum spec, which resulted in corruption in high-DPI devices. We don't have a good concept of handling multiple GPUs in the system, so I just set the budget to be the minimum across all contexts which report a value. In principle, we could have different memory managers for each GPU (and then we'd have to handle context migration, etc, so the solution becomes very complicated). As a reference, on a retina MBP, there are 2 GPUs -- a discrete GPU with 1GB and an integrated GPU which reports ~1.3GB, so the maximum per-tab memory budget will go from 128MB to 384MB (we still only allow a tab to have 1/2 of the total amount of memory that can be given out, to avoid excessive allocation). BUG=153918 Review URL: https://chromiumcodereview.appspot.com/11039030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@160277 0039d316-1c4b-4281-b951-d872f2087c98
* Add override message to divide GPU memory among windows.ccameron@chromium.org2012-10-011-0/+7
| | | | | | | | | | | The "number of windows" message is to be sent from the browser process, which is much more reliable than trying to reverse-engineer it from visibility messages asynchronously coming from WebKit. BUG=146448 Review URL: https://chromiumcodereview.appspot.com/11031009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159591 0039d316-1c4b-4281-b951-d872f2087c98
* Give Chrome OS more GPU memory. In particular, allow a maximum usage of ↵ccameron@chromium.org2012-09-111-0/+4
| | | | | | | | | | | 1GB, and remove the per-tab limit. BUG=147356 Review URL: https://chromiumcodereview.appspot.com/10910180 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155963 0039d316-1c4b-4281-b951-d872f2087c98
* Add GPU memory tab to the task manager.ccameron@chromium.org2012-08-181-0/+14
| | | | | | | | | | | | | | | | Each renderer process will have all of the resources that the GPU process has allocated on its behalf (including WebGL resources, compositor resources, and the backbuffer) included in its printed total. The GPU process will have the all resources currently allocated by the GPU process in its column. This will be approximately the sum of all other rows. The row for the GPU process is printed in ()s to draw attention to the fact that its size includes duplicates from other processes' sizes. I happy this UI scheme (having played with a few), but I'd wider feedback. Note that we do not account for swapchains or for backbuffers allocated by the browser process, so those allocations are not counted in the total. BUG=140157 Review URL: https://chromiumcodereview.appspot.com/10854076 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152233 0039d316-1c4b-4281-b951-d872f2087c98
* Reduce per-tab memory to 128M maximum, reduce default maximum across all ↵ccameron@chromium.org2012-08-151-0/+5
| | | | | | | | | | | | | tabs to 256M. The more appropriate fix is that we should be more aggressively discarding offscreen tiles, but this will temporarily fix some OOM issues that we're encountering on low-FB parts. BUG=141377 Review URL: https://chromiumcodereview.appspot.com/10827342 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151778 0039d316-1c4b-4281-b951-d872f2087c98
* Add a flag to specify the total amount of memory which may be allocated to ↵ccameron@chromium.org2012-07-311-22/+20
| | | | | | | | | | | | | | | GPU resources. Change constants in GpuMemoryManager to helper functions (and variables). This is towards (1) automated testing of the GPU memory manager and (2) getting actual vidmem values. BUG=132994 Review URL: https://chromiumcodereview.appspot.com/10823092 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149149 0039d316-1c4b-4281-b951-d872f2087c98
* Add global tracking of GPU memory allocations. Have each ContextGroup push ↵ccameron@chromium.org2012-07-281-6/+7
| | | | | | | | | | | memory tracking information to the GpuMemoryManager. With this we can determine if we transiently oversubscribe. BUG=135525 TEST= Review URL: https://chromiumcodereview.appspot.com/10796096 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148880 0039d316-1c4b-4281-b951-d872f2087c98
* Provide stub implementations of GetStubStats and related functions in ↵mmocny@chromium.org2012-07-191-0/+45
| | | | | | | | | | | GpuMemoryManager. BUG=131650 TEST=GpuMemoryManagerTest.GetStubStatsForLastManageTests content unittest Review URL: https://chromiumcodereview.appspot.com/10801014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147475 0039d316-1c4b-4281-b951-d872f2087c98
* Remove #pragma once from contentajwong@chromium.org2012-07-111-1/+0
| | | | | | Review URL: https://chromiumcodereview.appspot.com/10696166 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146071 0039d316-1c4b-4281-b951-d872f2087c98
* Reduce GpuMemoryManager allocation spam.mmocny@chromium.org2012-06-191-4/+13
| | | | | | | | | | | | | | The GpuMemoryManager will periodically schedule a Manage which calculates and assigns memory allocation limits for client contexts. At the moment, this process is kicked off when tab visibility changes, which is relatively infrequent. However, the future direction is for the GpuMemoryManager to track and manage client allocations as memory usage changes, which may happen with each generated frame, once for each client. We would like to be able to limit the rate at which we assign allocations, which for now is set to once every 16ms. BUG=120246 TEST=Manual Review URL: https://chromiumcodereview.appspot.com/10535063 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142972 0039d316-1c4b-4281-b951-d872f2087c98
* GpuMemoryManager suggests values for renderer Contents Texture Managers' ↵mmocny@chromium.org2012-05-011-0/+17
| | | | | | | | | | | | | | preferred memory limit. BUG=123382 TEST=Manual Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=134428 Review URL: http://codereview.chromium.org/10083056 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134801 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 134527 - Revert 134480 - Revert 134428 - GpuMemoryManager suggests ↵mmocny@chromium.org2012-04-301-17/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | values for renderer Contents Texture Managers' preferred memory limit. ======================================== This broke mac browser tests with "Failed to initialize command buffer service." broken tests:AudioLayoutTest.AudioOnlyVideoIntrinsicSize and AudioLayoutTest.MediaDocumentAudioSize BUG=123382 TEST=Manual Review URL: http://codereview.chromium.org/10083056 TBR=mmocny@chromium.org ======================================== This CL was not likely to be the cause and I just ran mac browser_tests without any issues. Review URL: https://chromiumcodereview.appspot.com/10267002 TBR=nsylvain@chromium.org Review URL: https://chromiumcodereview.appspot.com/10274007 TBR=mmocny@chromium.org Review URL: https://chromiumcodereview.appspot.com/10270014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134530 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 134480 - Revert 134428 - GpuMemoryManager suggests values for ↵mmocny@chromium.org2012-04-301-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | renderer Contents Texture Managers' preferred memory limit. ======================================== This broke mac browser tests with "Failed to initialize command buffer service." broken tests:AudioLayoutTest.AudioOnlyVideoIntrinsicSize and AudioLayoutTest.MediaDocumentAudioSize BUG=123382 TEST=Manual Review URL: http://codereview.chromium.org/10083056 TBR=mmocny@chromium.org ======================================== This CL was not likely to be the cause and I just ran mac browser_tests without any issues. Review URL: https://chromiumcodereview.appspot.com/10267002 TBR=nsylvain@chromium.org Review URL: https://chromiumcodereview.appspot.com/10274007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134527 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 134428 - GpuMemoryManager suggests values for renderer Contents ↵nsylvain@chromium.org2012-04-281-17/+0
| | | | | | | | | | | | | | | | | | Texture Managers' preferred memory limit. This broke mac browser tests with "Failed to initialize command buffer service." broken tests:AudioLayoutTest.AudioOnlyVideoIntrinsicSize and AudioLayoutTest.MediaDocumentAudioSize BUG=123382 TEST=Manual Review URL: http://codereview.chromium.org/10083056 TBR=mmocny@chromium.org Review URL: https://chromiumcodereview.appspot.com/10267002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134480 0039d316-1c4b-4281-b951-d872f2087c98