summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_process_impl.h
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-03 05:03:22 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-03 05:03:22 +0000
commit396c3a461549b02dcb830a287ac4656b2ca181e7 (patch)
treedfd70c68c3fc4aa501a8f1bf13bf4853d2f7faef /chrome/renderer/render_process_impl.h
parent29a694916746e366724f7ac6f9aa0d103894f4a9 (diff)
downloadchromium_src-396c3a461549b02dcb830a287ac4656b2ca181e7.zip
chromium_src-396c3a461549b02dcb830a287ac4656b2ca181e7.tar.gz
chromium_src-396c3a461549b02dcb830a287ac4656b2ca181e7.tar.bz2
Make the pepper 2D flush callback actually function as advertised. It will now
get called asynchronously when the bits are actually copied to the screen, rather than synchronously from inside the paint function. This makes it useful for plugins to use the callback for rate limiting. This also adds a lot of infrastructure for running tests on pepper devices, and includes a unit test for the new flush behavior. I made the existing RenderProcess object an abstract interface and made the existing MockProcess (renamed to be more clear) implement that. This avoids a static cast that would actually crash during a unit test because some code was hardcoded to expect a RenderProcess object. This fixes base's IDMap iterator which has apparently never been used for an IDMap with ownership semantics. TEST=Unit test included BUG=none Review URL: http://codereview.chromium.org/661124 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40490 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/render_process_impl.h')
-rw-r--r--chrome/renderer/render_process_impl.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/chrome/renderer/render_process_impl.h b/chrome/renderer/render_process_impl.h
new file mode 100644
index 0000000..11778f0
--- /dev/null
+++ b/chrome/renderer/render_process_impl.h
@@ -0,0 +1,74 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_RENDER_PROCESS_IMPL_H_
+#define CHROME_RENDERER_RENDER_PROCESS_IMPL_H_
+
+#include "base/timer.h"
+#include "chrome/renderer/render_process.h"
+#include "chrome/renderer/render_thread.h"
+#include "native_client/src/shared/imc/nacl_imc.h"
+#include "skia/ext/platform_canvas.h"
+
+// Implementation of the RenderProcess interface for the regular browser.
+// See also MockRenderProcess which implements the active "RenderProcess" when
+// running under certain unit tests.
+class RenderProcessImpl : public RenderProcess {
+ public:
+ RenderProcessImpl();
+ ~RenderProcessImpl();
+
+ // RenderProcess implementation.
+ virtual skia::PlatformCanvas* GetDrawingCanvas(TransportDIB** memory,
+ const gfx::Rect& rect);
+ virtual void ReleaseTransportDIB(TransportDIB* memory);
+ virtual bool UseInProcessPlugins() const;
+ virtual bool HasInitializedMediaLibrary() const;
+
+ // Like UseInProcessPlugins(), but called before RenderProcess is created
+ // and does not allow overriding by tests. This just checks the command line
+ // each time.
+ static bool InProcessPlugins();
+
+ private:
+ // Look in the shared memory cache for a suitable object to reuse.
+ // result: (output) the memory found
+ // size: the resulting memory will be >= this size, in bytes
+ // returns: false if a suitable DIB memory could not be found
+ bool GetTransportDIBFromCache(TransportDIB** result, size_t size);
+
+ // Maybe put the given shared memory into the shared memory cache. Returns
+ // true if the SharedMemory object was stored in the cache; otherwise, false
+ // is returned.
+ bool PutSharedMemInCache(TransportDIB* memory);
+
+ void ClearTransportDIBCache();
+
+ // Return the index of a free cache slot in which to install a transport DIB
+ // of the given size. If all entries in the cache are larger than the given
+ // size, this doesn't free any slots and returns -1.
+ int FindFreeCacheSlot(size_t size);
+
+ // Create a new transport DIB of, at least, the given size. Return NULL on
+ // error.
+ TransportDIB* CreateTransportDIB(size_t size);
+ void FreeTransportDIB(TransportDIB*);
+
+ // A very simplistic and small cache. If an entry in this array is non-null,
+ // then it points to a SharedMemory object that is available for reuse.
+ TransportDIB* shared_mem_cache_[2];
+
+ // This DelayTimer cleans up our cache 5 seconds after the last use.
+ base::DelayTimer<RenderProcessImpl> shared_mem_cache_cleaner_;
+
+ // TransportDIB sequence number
+ uint32 transport_dib_next_sequence_number_;
+
+ bool in_process_plugins_;
+ bool initialized_media_library_;
+
+ DISALLOW_COPY_AND_ASSIGN(RenderProcessImpl);
+};
+
+#endif // CHROME_RENDERER_RENDER_PROCESS_IMPL_H_