diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-19 23:37:01 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-19 23:37:01 +0000 |
commit | d914b2b089eb4255946aff2428f79f78739586a5 (patch) | |
tree | 98a9113121cb22921e0e82f4a4cdd5f9f6a049e1 /content/ppapi_plugin | |
parent | fbd57461041b0a7eb5d93ca4e057d11abb1e8b19 (diff) | |
download | chromium_src-d914b2b089eb4255946aff2428f79f78739586a5.zip chromium_src-d914b2b089eb4255946aff2428f79f78739586a5.tar.gz chromium_src-d914b2b089eb4255946aff2428f79f78739586a5.tar.bz2 |
Remove the Webkit thread in the PPAPI plugin process and perform the text and font operations
on the PPAPI main thread. This thread is now registered as the Webkit thread.
Fixes performance issues seen in Flapper with text and font operations. It appears that the perf
issues occur due to context switching between the main thread and the webkit thread.
As per comments from Brett moving the font forwarding code inline to ppb_font_shared.cc. This file
has been moved to ppapi/shared_impl/private as it now brings in a dependency on WebKit. The font
creation has been wired up to the ResourceCreationAPI as suggested.
BUG=110190
R=brettw
Review URL: https://chromiumcodereview.appspot.com/9133015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118385 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/ppapi_plugin')
-rw-r--r-- | content/ppapi_plugin/ppapi_thread.cc | 20 | ||||
-rw-r--r-- | content/ppapi_plugin/ppapi_thread.h | 13 | ||||
-rw-r--r-- | content/ppapi_plugin/ppapi_webkit_thread.cc | 44 | ||||
-rw-r--r-- | content/ppapi_plugin/ppapi_webkit_thread.h | 50 |
4 files changed, 9 insertions, 118 deletions
diff --git a/content/ppapi_plugin/ppapi_thread.cc b/content/ppapi_plugin/ppapi_thread.cc index e989785..3277f1b 100644 --- a/content/ppapi_plugin/ppapi_thread.cc +++ b/content/ppapi_plugin/ppapi_thread.cc @@ -14,7 +14,7 @@ #include "content/common/child_process_messages.h" #include "content/ppapi_plugin/broker_process_dispatcher.h" #include "content/ppapi_plugin/plugin_process_dispatcher.h" -#include "content/ppapi_plugin/ppapi_webkit_thread.h" +#include "content/ppapi_plugin/ppapi_webkitplatformsupport_impl.h" #include "content/public/common/content_switches.h" #include "content/public/common/sandbox_init.h" #include "ipc/ipc_channel_handle.h" @@ -25,7 +25,7 @@ #include "ppapi/proxy/plugin_globals.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/proxy/interface_list.h" -#include "webkit/plugins/ppapi/webkit_forwarding_impl.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" #if defined(OS_WIN) #include "sandbox/src/sandbox.h" @@ -50,6 +50,8 @@ PpapiThread::PpapiThread(bool is_broker) base::RandInt(0, std::numeric_limits<PP_Module>::max())), next_plugin_dispatcher_id_(1) { ppapi::proxy::PluginGlobals::Get()->set_plugin_proxy_delegate(this); + webkit_platform_support_.reset(new PpapiWebKitPlatformSupportImpl); + WebKit::initialize(webkit_platform_support_.get()); } PpapiThread::~PpapiThread() { @@ -67,6 +69,7 @@ PpapiThread::~PpapiThread() { library_.GetFunctionPointer("PPP_ShutdownModule")); if (shutdown_function) shutdown_function(); + WebKit::shutdown(); } // The "regular" ChildThread implements this function and does some standard @@ -111,19 +114,6 @@ std::set<PP_Instance>* PpapiThread::GetGloballySeenInstanceIDSet() { return &globally_seen_instance_ids_; } -ppapi::WebKitForwarding* PpapiThread::GetWebKitForwarding() { - if (!webkit_forwarding_.get()) - webkit_forwarding_.reset(new webkit::ppapi::WebKitForwardingImpl); - return webkit_forwarding_.get(); -} - -void PpapiThread::PostToWebKitThread(const tracked_objects::Location& from_here, - const base::Closure& task) { - if (!webkit_thread_.get()) - webkit_thread_.reset(new PpapiWebKitThread); - webkit_thread_->PostTask(from_here, task); -} - bool PpapiThread::SendToBrowser(IPC::Message* msg) { return Send(msg); } diff --git a/content/ppapi_plugin/ppapi_thread.h b/content/ppapi_plugin/ppapi_thread.h index 56e12c5..bff66db 100644 --- a/content/ppapi_plugin/ppapi_thread.h +++ b/content/ppapi_plugin/ppapi_thread.h @@ -22,7 +22,7 @@ #include "ppapi/proxy/plugin_proxy_delegate.h" class FilePath; -class PpapiWebKitThread; +class PpapiWebKitPlatformSupportImpl; namespace IPC { struct ChannelHandle; @@ -48,9 +48,6 @@ class PpapiThread : public ChildThread, virtual void Unregister(uint32 plugin_dispatcher_id) OVERRIDE; // PluginProxyDelegate. - virtual ppapi::WebKitForwarding* GetWebKitForwarding() OVERRIDE; - virtual void PostToWebKitThread(const tracked_objects::Location& from_here, - const base::Closure& task) OVERRIDE; virtual bool SendToBrowser(IPC::Message* msg) OVERRIDE; virtual void PreCacheFont(const void* logfontw) OVERRIDE; @@ -92,15 +89,13 @@ class PpapiThread : public ChildThread, // See Dispatcher::Delegate::GetGloballySeenInstanceIDSet. std::set<PP_Instance> globally_seen_instance_ids_; - // Lazily created by GetWebKitForwarding. - scoped_ptr<ppapi::WebKitForwarding> webkit_forwarding_; - - scoped_ptr<PpapiWebKitThread> webkit_thread_; - // The PluginDispatcher instances contained in the map are not owned by it. std::map<uint32, ppapi::proxy::PluginDispatcher*> plugin_dispatchers_; uint32 next_plugin_dispatcher_id_; + // The WebKitPlatformSupport implementation. + scoped_ptr<PpapiWebKitPlatformSupportImpl> webkit_platform_support_; + DISALLOW_IMPLICIT_CONSTRUCTORS(PpapiThread); }; diff --git a/content/ppapi_plugin/ppapi_webkit_thread.cc b/content/ppapi_plugin/ppapi_webkit_thread.cc deleted file mode 100644 index cb3d482..0000000 --- a/content/ppapi_plugin/ppapi_webkit_thread.cc +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2011 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. - -#include "content/ppapi_plugin/ppapi_webkit_thread.h" - -#include "base/logging.h" -#include "content/ppapi_plugin/ppapi_webkitplatformsupport_impl.h" -#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" - -PpapiWebKitThread::PpapiWebKitThread() { - DCHECK(!webkit_thread_.get()); - - webkit_thread_.reset(new InternalWebKitThread); - bool started = webkit_thread_->Start(); - DCHECK(started); -} - -PpapiWebKitThread::~PpapiWebKitThread() { -} - -void PpapiWebKitThread::PostTask(const tracked_objects::Location& from_here, - const base::Closure& task) { - webkit_thread_->message_loop()->PostTask(from_here, task); -} - -PpapiWebKitThread::InternalWebKitThread::InternalWebKitThread() - : base::Thread("PPAPIWebKit") { -} - -PpapiWebKitThread::InternalWebKitThread::~InternalWebKitThread() { - Stop(); -} - -void PpapiWebKitThread::InternalWebKitThread::Init() { - DCHECK(!webkit_platform_support_.get()); - webkit_platform_support_.reset(new PpapiWebKitPlatformSupportImpl); - WebKit::initialize(webkit_platform_support_.get()); -} - -void PpapiWebKitThread::InternalWebKitThread::CleanUp() { - DCHECK(webkit_platform_support_.get()); - WebKit::shutdown(); -} diff --git a/content/ppapi_plugin/ppapi_webkit_thread.h b/content/ppapi_plugin/ppapi_webkit_thread.h deleted file mode 100644 index a7606f6..0000000 --- a/content/ppapi_plugin/ppapi_webkit_thread.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2011 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 CONTENT_PPAPI_PLUGIN_PPAPI_WEBKIT_THREAD_H_ -#define CONTENT_PPAPI_PLUGIN_PPAPI_WEBKIT_THREAD_H_ -#pragma once - -#include "base/basictypes.h" -#include "base/memory/scoped_ptr.h" -#include "base/threading/thread.h" - -class PpapiWebKitPlatformSupportImpl; - -// This creates a WebKit main thread on instantiation on construction and kills -// it on deletion. See also content/browser/in_process_webkit for the -// corresponding concept in the browser process. -class PpapiWebKitThread { - public: - PpapiWebKitThread(); - ~PpapiWebKitThread(); - - // Posts the given task to the thread, see MessageLoop::PostTask. - void PostTask( - const tracked_objects::Location& from_here, - const base::Closure& task); - - private: - // Must be private so that we can carefully control its lifetime. - class InternalWebKitThread : public base::Thread { - public: - InternalWebKitThread(); - virtual ~InternalWebKitThread(); - // Does the actual initialization and shutdown of WebKit. Called at the - // beginning and end of the thread's lifetime. - virtual void Init() OVERRIDE; - virtual void CleanUp() OVERRIDE; - - private: - // The WebKitPlatformSupport implementation. Only access on WebKit thread. - scoped_ptr<PpapiWebKitPlatformSupportImpl> webkit_platform_support_; - }; - - // Pointer to the actual WebKitThread. - scoped_ptr<InternalWebKitThread> webkit_thread_; - - DISALLOW_COPY_AND_ASSIGN(PpapiWebKitThread); -}; - -#endif // CONTENT_PPAPI_PLUGIN_PPAPI_WEBKIT_THREAD_H_ |