| Index: content/common/dwrite_font_platform_win.cc
|
| diff --git a/content/common/dwrite_font_platform_win.cc b/content/common/dwrite_font_platform_win.cc
|
| index da30d93d8fb91706860eda970988d9b67bacd24b..5d56ce4b55549cf41cbca6d840421b801ff1961f 100644
|
| --- a/content/common/dwrite_font_platform_win.cc
|
| +++ b/content/common/dwrite_font_platform_win.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "content/common/dwrite_font_platform_win.h"
|
| +#include "content/public/common/dwrite_font_platform_win.h"
|
|
|
| #include <dwrite.h>
|
| #include <map>
|
| @@ -33,7 +33,6 @@
|
| #include "base/win/registry.h"
|
| #include "base/win/scoped_comptr.h"
|
| #include "content/public/common/content_switches.h"
|
| -#include "content/public/common/dwrite_font_cache_win.h"
|
|
|
| namespace {
|
|
|
| @@ -70,7 +69,15 @@ const char kFontKeyName[] = "font_key_name";
|
| // phase. If we don't use this percentile formula we will end up
|
| // increasing significant cache size by caching entire file contents
|
| // for some of the font files.
|
| -const double kMaxPercentileOfFontFileSizeToCache = 0.7;
|
| +const double kMaxPercentileOfFontFileSizeToCache = 0.5;
|
| +
|
| +// With current implementation we map entire shared section into memory during
|
| +// renderer startup. This causes increase in working set of Chrome. As first
|
| +// step we want to see if caching is really improving any performance for our
|
| +// users, so we are putting arbitrary limit on cache file size. There are
|
| +// multiple ways we can tune our working size, like mapping only required part
|
| +// of section at any given time.
|
| +const double kArbitraryCacheFileSizeLimit = (20 * 1024 * 1024);
|
|
|
| // We have chosen current font file length arbitrarily. In our logic
|
| // if we don't find file we are looking for in cache we end up loading
|
| @@ -368,6 +375,14 @@ class FontCacheWriter {
|
| if (cookie_map_.find(cookie) == cookie_map_.end())
|
| return false;
|
|
|
| + // We will skip writing entries beyond allowed limit. Following condition
|
| + // doesn't enforce hard file size. We need to write complete font entry.
|
| + int64 length = static_cache_->GetLength();
|
| + if (length == -1 || length >= kArbitraryCacheFileSizeLimit) {
|
| + count_font_entries_ignored_++;
|
| + return false;
|
| + }
|
| +
|
| FontEntryInternal* font_entry = cookie_map_[cookie].get();
|
| RegionVector& regions = font_entry->regions;
|
| std::sort(regions.begin(), regions.end(), SortCacheRegions);
|
| @@ -1122,8 +1137,6 @@ bool BuildFontCacheInternal(const WCHAR* file_name) {
|
| CHECK(SUCCEEDED(hr));
|
| CHECK(font_collection.Get() != NULL);
|
|
|
| - UMA_HISTOGRAM_TIMES("DirectWrite.Fonts.LoadTime", time_delta);
|
| -
|
| base::debug::ClearCrashKey(kFontKeyName);
|
|
|
| return true;
|
| @@ -1173,12 +1186,8 @@ bool LoadFontCache(const base::FilePath& path) {
|
| return true;
|
| }
|
|
|
| -// Assumption for this function is that it will get called through a posted task
|
| -// on FILE thread.
|
| -bool BuildAndLoadFontCache(const base::FilePath& file) {
|
| - if (BuildFontCacheInternal(file.value().c_str()))
|
| - return LoadFontCache(file);
|
| - return false;
|
| +bool BuildFontCache(const base::FilePath& file) {
|
| + return BuildFontCacheInternal(file.value().c_str());
|
| }
|
|
|
| } // namespace content
|
|
|