Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1507)

Unified Diff: content/common/child_process_host.h

Issue 7866019: New implementation of font precache on Windows. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/child_process_host.h
diff --git a/content/common/child_process_host.h b/content/common/child_process_host.h
index 8637c184c9cf9cc3fce8128d51cc1d53f7ba7504..da9edfb5d71463590ae4ace4e66685a586efd6f7 100644
--- a/content/common/child_process_host.h
+++ b/content/common/child_process_host.h
@@ -8,6 +8,7 @@
#include <string>
#include <vector>
+#include <map>
#include "build/build_config.h"
@@ -27,6 +28,12 @@ namespace IPC {
class Message;
}
+#if defined(OS_WIN)
+// Types used in PreCacheFont
+typedef std::vector<std::wstring> FontNameVector;
+typedef std::map<int, FontNameVector> PidToFontNames;
+#endif // defined(OS_WIN)
+
// Provides common functionality for hosting a child process and processing IPC
// messages between the host and the child process. Subclasses are responsible
// for the actual launching and terminating of the child processes.
@@ -86,7 +93,8 @@ class ChildProcessHost : public IPC::Channel::Listener,
#if defined(OS_WIN)
// See comments in the cc file. This is a common hack needed for a process
// hosting a sandboxed child process. Hence it lives in this file.
- static void PreCacheFont(LOGFONT font);
+ static void PreCacheFont(LOGFONT font, int pid);
+ static void ReleaseCachedFont(int pid);
#endif // defined(OS_WIN)
// IPC::Message::Sender implementation.
@@ -143,6 +151,33 @@ class ChildProcessHost : public IPC::Channel::Listener,
ListenerHook listener_;
+#if defined (OS_WIN)
+ class FontCache {
+ public:
+ FontCache() {} // Make Singleton<> happy.
+ ~FontCache() {}
+
+ static FontCache* GetInstance();
+ void PreCacheFont(LOGFONT font, int pid);
+ void ReleaseCachedFont(int pid);
+
+ private:
+ struct CacheElement {
+ CacheElement();
+ ~CacheElement();
+
+ HFONT font_;
+ HDC dc_;
+ int ref_count_;
+ };
+ std::map<std::wstring, CacheElement> cache_;
+ PidToFontNames pid_font_map_;
+ base::Lock mutex_;
+
+ DISALLOW_COPY_AND_ASSIGN(FontCache);
+ };
+#endif
+
bool opening_channel_; // True while we're waiting the channel to be opened.
scoped_ptr<IPC::Channel> channel_;
std::string channel_id_;

Powered by Google App Engine
This is Rietveld 408576698