summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-13 01:12:13 +0000
committerapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-13 01:12:13 +0000
commitfb79aa28389554bcb6e64242f982f76aabe287b4 (patch)
tree9166a1669bf7773d83831409662d6bd5317387d6 /chrome/renderer
parent29a65f3f6921d1e16377e340c45191bfac43a499 (diff)
downloadchromium_src-fb79aa28389554bcb6e64242f982f76aabe287b4.zip
chromium_src-fb79aa28389554bcb6e64242f982f76aabe287b4.tar.gz
chromium_src-fb79aa28389554bcb6e64242f982f76aabe287b4.tar.bz2
Renderer process can allocate anonymous shared memory without help from browser process on Windows.
The browser process IO thread can be busy at startup time. This saves about 20ms to allocate the first command buffer. Refactored so PepperPluginDelegateImpl and PrintWebViewHelper use the same function to allocate shared memory. BUG=163215 Review URL: https://codereview.chromium.org/11469015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172748 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/print_web_view_helper.cc17
-rw-r--r--chrome/renderer/print_web_view_helper_linux.cc24
2 files changed, 21 insertions, 20 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc
index e3d8724..250ed0f 100644
--- a/chrome/renderer/print_web_view_helper.cc
+++ b/chrome/renderer/print_web_view_helper.cc
@@ -1398,14 +1398,15 @@ bool PrintWebViewHelper::CopyMetafileDataToSharedMem(
printing::Metafile* metafile,
base::SharedMemoryHandle* shared_mem_handle) {
uint32 buf_size = metafile->GetDataSize();
- base::SharedMemoryHandle mem_handle =
- content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size);
- if (base::SharedMemory::IsHandleValid(mem_handle)) {
- base::SharedMemory shared_buf(mem_handle, false);
- if (shared_buf.Map(buf_size)) {
- metafile->GetData(shared_buf.memory(), buf_size);
- shared_buf.GiveToProcess(base::GetCurrentProcessHandle(),
- shared_mem_handle);
+ scoped_ptr<base::SharedMemory> shared_buf(
+ content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(
+ buf_size).release());
+
+ if (shared_buf.get()) {
+ if (shared_buf->Map(buf_size)) {
+ metafile->GetData(shared_buf->memory(), buf_size);
+ shared_buf->GiveToProcess(base::GetCurrentProcessHandle(),
+ shared_mem_handle);
return true;
}
}
diff --git a/chrome/renderer/print_web_view_helper_linux.cc b/chrome/renderer/print_web_view_helper_linux.cc
index ca1de1e..d7cd691 100644
--- a/chrome/renderer/print_web_view_helper_linux.cc
+++ b/chrome/renderer/print_web_view_helper_linux.cc
@@ -91,23 +91,23 @@ bool PrintWebViewHelper::PrintPages(WebFrame* frame, const WebNode& node) {
printed_page_params.data_size = 0;
printed_page_params.document_cookie = params.params.document_cookie;
- base::SharedMemoryHandle shared_mem_handle =
- content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size);
- if (!base::SharedMemory::IsHandleValid(shared_mem_handle)) {
- NOTREACHED() << "AllocateSharedMemoryBuffer returned bad handle";
- return false;
- }
-
{
- base::SharedMemory shared_buf(shared_mem_handle, false);
- if (!shared_buf.Map(buf_size)) {
+ scoped_ptr<base::SharedMemory> shared_mem(
+ content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(
+ buf_size).release());
+ if (!shared_mem.get()) {
+ NOTREACHED() << "AllocateSharedMemoryBuffer failed";
+ return false;
+ }
+
+ if (!shared_mem->Map(buf_size)) {
NOTREACHED() << "Map failed";
return false;
}
- metafile.GetData(shared_buf.memory(), buf_size);
+ metafile.GetData(shared_mem->memory(), buf_size);
printed_page_params.data_size = buf_size;
- shared_buf.GiveToProcess(base::GetCurrentProcessHandle(),
- &(printed_page_params.metafile_data_handle));
+ shared_mem->GiveToProcess(base::GetCurrentProcessHandle(),
+ &(printed_page_params.metafile_data_handle));
}
for (size_t i = 0; i < printed_pages.size(); ++i) {