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

Side by Side Diff: content/child/dwrite_font_proxy/font_fallback_win_unittest.cc

Issue 2054273002: Font fallback for UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/dwrite_font_proxy/font_fallback_win.h" 5 #include "content/child/dwrite_font_proxy/font_fallback_win.h"
6 6
7 #include <dwrite.h> 7 #include <dwrite.h>
8 #include <shlobj.h> 8 #include <shlobj.h>
9 #include <wrl.h> 9 #include <wrl.h>
10 10
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h" 14 #include "content/child/dwrite_font_proxy/dwrite_font_proxy_win.h"
15 #include "content/common/dwrite_text_analysis_source_win.h"
16 #include "content/test/dwrite_font_fake_sender_win.h" 15 #include "content/test/dwrite_font_fake_sender_win.h"
17 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/gfx/win/text_analysis_source.h"
18 18
19 namespace mswr = Microsoft::WRL; 19 namespace mswr = Microsoft::WRL;
20 20
21 namespace content { 21 namespace content {
22 22
23 namespace { 23 namespace {
24 24
25 class FontFallbackUnitTest : public testing::Test { 25 class FontFallbackUnitTest : public testing::Test {
26 public: 26 public:
27 FontFallbackUnitTest() { 27 FontFallbackUnitTest() {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 TEST_F(FontFallbackUnitTest, MapCharacters) { 72 TEST_F(FontFallbackUnitTest, MapCharacters) {
73 mswr::ComPtr<FontFallback> fallback; 73 mswr::ComPtr<FontFallback> fallback;
74 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), 74 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(),
75 fake_collection_->GetSender()); 75 fake_collection_->GetSender());
76 76
77 mswr::ComPtr<IDWriteFont> font; 77 mswr::ComPtr<IDWriteFont> font;
78 UINT32 mapped_length = 0; 78 UINT32 mapped_length = 0;
79 float scale = 0.0; 79 float scale = 0.0;
80 80
81 mswr::ComPtr<TextAnalysisSource> text; 81 mswr::ComPtr<gfx::win::TextAnalysisSource> text;
82 mswr::MakeAndInitialize<TextAnalysisSource>( 82 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
83 &text, L"hello", L"en-us", number_substitution_.Get(), 83 &text, L"hello", L"en-us", number_substitution_.Get(),
84 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 84 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
85 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, 85 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr,
86 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 86 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
87 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 87 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
88 &scale); 88 &scale);
89 89
90 EXPECT_EQ(1u, mapped_length); // The fake sender only maps one character 90 EXPECT_EQ(1u, mapped_length); // The fake sender only maps one character
91 EXPECT_NE(nullptr, font.Get()); 91 EXPECT_NE(nullptr, font.Get());
92 } 92 }
93 93
94 TEST_F(FontFallbackUnitTest, DuplicateCallsShouldNotRepeatIPC) { 94 TEST_F(FontFallbackUnitTest, DuplicateCallsShouldNotRepeatIPC) {
95 mswr::ComPtr<FontFallback> fallback; 95 mswr::ComPtr<FontFallback> fallback;
96 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), 96 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(),
97 fake_collection_->GetTrackingSender()); 97 fake_collection_->GetTrackingSender());
98 98
99 mswr::ComPtr<IDWriteFont> font; 99 mswr::ComPtr<IDWriteFont> font;
100 UINT32 mapped_length = 0; 100 UINT32 mapped_length = 0;
101 float scale = 0.0; 101 float scale = 0.0;
102 102
103 mswr::ComPtr<TextAnalysisSource> text; 103 mswr::ComPtr<gfx::win::TextAnalysisSource> text;
104 mswr::MakeAndInitialize<TextAnalysisSource>( 104 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
105 &text, L"hello", L"en-us", number_substitution_.Get(), 105 &text, L"hello", L"en-us", number_substitution_.Get(),
106 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 106 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
107 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, 107 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr,
108 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 108 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
109 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 109 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
110 &scale); 110 &scale);
111 mapped_length = 0; 111 mapped_length = 0;
112 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, 112 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr,
113 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 113 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
114 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 114 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
115 &scale); 115 &scale);
116 116
117 EXPECT_EQ(1u, fake_collection_->MessageCount()); 117 EXPECT_EQ(1u, fake_collection_->MessageCount());
118 EXPECT_EQ(5u, mapped_length); 118 EXPECT_EQ(5u, mapped_length);
119 } 119 }
120 120
121 TEST_F(FontFallbackUnitTest, DifferentFamilyShouldNotReuseCache) { 121 TEST_F(FontFallbackUnitTest, DifferentFamilyShouldNotReuseCache) {
122 mswr::ComPtr<FontFallback> fallback; 122 mswr::ComPtr<FontFallback> fallback;
123 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), 123 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(),
124 fake_collection_->GetTrackingSender()); 124 fake_collection_->GetTrackingSender());
125 125
126 mswr::ComPtr<IDWriteFont> font; 126 mswr::ComPtr<IDWriteFont> font;
127 UINT32 mapped_length = 0; 127 UINT32 mapped_length = 0;
128 float scale = 0.0; 128 float scale = 0.0;
129 129
130 mswr::ComPtr<TextAnalysisSource> text; 130 mswr::ComPtr<gfx::win::TextAnalysisSource> text;
131 mswr::MakeAndInitialize<TextAnalysisSource>( 131 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
132 &text, L"hello", L"en-us", number_substitution_.Get(), 132 &text, L"hello", L"en-us", number_substitution_.Get(),
133 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 133 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
134 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font1", 134 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font1",
135 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 135 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
136 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 136 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
137 &scale); 137 &scale);
138 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font2", 138 fallback->MapCharacters(text.Get(), 0, 5, nullptr, L"font2",
139 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 139 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
140 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 140 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
141 &scale); 141 &scale);
142 142
143 EXPECT_EQ(2u, fake_collection_->MessageCount()); 143 EXPECT_EQ(2u, fake_collection_->MessageCount());
144 } 144 }
145 145
146 TEST_F(FontFallbackUnitTest, CacheMissShouldRepeatIPC) { 146 TEST_F(FontFallbackUnitTest, CacheMissShouldRepeatIPC) {
147 mswr::ComPtr<FontFallback> fallback; 147 mswr::ComPtr<FontFallback> fallback;
148 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), 148 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(),
149 fake_collection_->GetTrackingSender()); 149 fake_collection_->GetTrackingSender());
150 150
151 mswr::ComPtr<IDWriteFont> font; 151 mswr::ComPtr<IDWriteFont> font;
152 UINT32 mapped_length = 0; 152 UINT32 mapped_length = 0;
153 float scale = 0.0; 153 float scale = 0.0;
154 154
155 mswr::ComPtr<TextAnalysisSource> text; 155 mswr::ComPtr<gfx::win::TextAnalysisSource> text;
156 mswr::MakeAndInitialize<TextAnalysisSource>( 156 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
157 &text, L"hello", L"en-us", number_substitution_.Get(), 157 &text, L"hello", L"en-us", number_substitution_.Get(),
158 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 158 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
159 mswr::ComPtr<TextAnalysisSource> unmappable_text; 159 mswr::ComPtr<gfx::win::TextAnalysisSource> unmappable_text;
160 mswr::MakeAndInitialize<TextAnalysisSource>( 160 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
161 &unmappable_text, L"\uffff", L"en-us", number_substitution_.Get(), 161 &unmappable_text, L"\uffff", L"en-us", number_substitution_.Get(),
162 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 162 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
163 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, 163 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr,
164 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 164 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
165 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 165 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
166 &scale); 166 &scale);
167 fallback->MapCharacters(unmappable_text.Get(), 0, 1, nullptr, nullptr, 167 fallback->MapCharacters(unmappable_text.Get(), 0, 1, nullptr, nullptr,
168 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 168 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
169 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 169 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
170 &scale); 170 &scale);
171 171
172 EXPECT_EQ(2u, fake_collection_->MessageCount()); 172 EXPECT_EQ(2u, fake_collection_->MessageCount());
173 } 173 }
174 174
175 TEST_F(FontFallbackUnitTest, SurrogatePairCacheHit) { 175 TEST_F(FontFallbackUnitTest, SurrogatePairCacheHit) {
176 mswr::ComPtr<FontFallback> fallback; 176 mswr::ComPtr<FontFallback> fallback;
177 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(), 177 mswr::MakeAndInitialize<FontFallback>(&fallback, collection_.Get(),
178 fake_collection_->GetTrackingSender()); 178 fake_collection_->GetTrackingSender());
179 179
180 mswr::ComPtr<IDWriteFont> font; 180 mswr::ComPtr<IDWriteFont> font;
181 UINT32 mapped_length = 0; 181 UINT32 mapped_length = 0;
182 float scale = 0.0; 182 float scale = 0.0;
183 183
184 mswr::ComPtr<TextAnalysisSource> text; 184 mswr::ComPtr<gfx::win::TextAnalysisSource> text;
185 mswr::MakeAndInitialize<TextAnalysisSource>( 185 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
186 &text, L"hello", L"en-us", number_substitution_.Get(), 186 &text, L"hello", L"en-us", number_substitution_.Get(),
187 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 187 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
188 mswr::ComPtr<TextAnalysisSource> surrogate_pair_text; 188 mswr::ComPtr<gfx::win::TextAnalysisSource> surrogate_pair_text;
189 mswr::MakeAndInitialize<TextAnalysisSource>( 189 mswr::MakeAndInitialize<gfx::win::TextAnalysisSource>(
190 &surrogate_pair_text, L"\U0001d300", L"en-us", number_substitution_.Get(), 190 &surrogate_pair_text, L"\U0001d300", L"en-us", number_substitution_.Get(),
191 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT); 191 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT);
192 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr, 192 fallback->MapCharacters(text.Get(), 0, 5, nullptr, nullptr,
193 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 193 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
194 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 194 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
195 &scale); 195 &scale);
196 fallback->MapCharacters(surrogate_pair_text.Get(), 0, 2, nullptr, nullptr, 196 fallback->MapCharacters(surrogate_pair_text.Get(), 0, 2, nullptr, nullptr,
197 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 197 DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
198 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font, 198 DWRITE_FONT_STRETCH_NORMAL, &mapped_length, &font,
199 &scale); 199 &scale);
200 200
201 EXPECT_EQ(1u, fake_collection_->MessageCount()); 201 EXPECT_EQ(1u, fake_collection_->MessageCount());
202 EXPECT_EQ(2u, mapped_length); 202 EXPECT_EQ(2u, mapped_length);
203 } 203 }
204 204
205 } // namespace 205 } // namespace
206 } // namespace content 206 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698