diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-13 01:12:13 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-13 01:12:13 +0000 |
commit | fb79aa28389554bcb6e64242f982f76aabe287b4 (patch) | |
tree | 9166a1669bf7773d83831409662d6bd5317387d6 /chrome/renderer | |
parent | 29a65f3f6921d1e16377e340c45191bfac43a499 (diff) | |
download | chromium_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.cc | 17 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper_linux.cc | 24 |
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) { |