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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/shaping/CachingWordShapeIterator.h

Issue 2807913002: Replace ASSERT, ASSERT_NOT_REACHED, and RELEASE_ASSERT in platform/fonts (Closed)
Patch Set: rebase Created 3 years, 8 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 /* 1 /*
2 * Copyright (C) 2015 Google Inc. All rights reserved. 2 * Copyright (C) 2015 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 public: 43 public:
44 CachingWordShapeIterator(ShapeCache* cache, 44 CachingWordShapeIterator(ShapeCache* cache,
45 const TextRun& run, 45 const TextRun& run,
46 const Font* font) 46 const Font* font)
47 : shape_cache_(cache), 47 : shape_cache_(cache),
48 text_run_(run), 48 text_run_(run),
49 font_(font), 49 font_(font),
50 spacing_(run, font->GetFontDescription()), 50 spacing_(run, font->GetFontDescription()),
51 width_so_far_(0), 51 width_so_far_(0),
52 start_index_(0) { 52 start_index_(0) {
53 ASSERT(font); 53 DCHECK(font);
54 54
55 // Shaping word by word is faster as each word is cached. If we cannot 55 // Shaping word by word is faster as each word is cached. If we cannot
56 // use the cache or if the font doesn't support word by word shaping 56 // use the cache or if the font doesn't support word by word shaping
57 // fall back on shaping the entire run. 57 // fall back on shaping the entire run.
58 shape_by_word_ = font_->CanShapeWordByWord(); 58 shape_by_word_ = font_->CanShapeWordByWord();
59 } 59 }
60 60
61 bool Next(RefPtr<const ShapeResult>* word_result) { 61 bool Next(RefPtr<const ShapeResult>* word_result) {
62 if (UNLIKELY(text_run_.AllowTabs())) 62 if (UNLIKELY(text_run_.AllowTabs()))
63 return NextForAllowTabs(word_result); 63 return NextForAllowTabs(word_result);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 } 148 }
149 149
150 bool ShapeToEndIndex(RefPtr<const ShapeResult>* result, unsigned end_index) { 150 bool ShapeToEndIndex(RefPtr<const ShapeResult>* result, unsigned end_index) {
151 if (!end_index || end_index <= start_index_) 151 if (!end_index || end_index <= start_index_)
152 return false; 152 return false;
153 153
154 const unsigned length = text_run_.length(); 154 const unsigned length = text_run_.length();
155 if (!start_index_ && end_index == length) { 155 if (!start_index_ && end_index == length) {
156 *result = ShapeWord(text_run_, font_); 156 *result = ShapeWord(text_run_, font_);
157 } else { 157 } else {
158 ASSERT(end_index <= length); 158 DCHECK_LE(end_index, length);
159 TextRun sub_run = 159 TextRun sub_run =
160 text_run_.SubRun(start_index_, end_index - start_index_); 160 text_run_.SubRun(start_index_, end_index - start_index_);
161 *result = ShapeWord(sub_run, font_); 161 *result = ShapeWord(sub_run, font_);
162 } 162 }
163 start_index_ = end_index; 163 start_index_ = end_index;
164 return result->Get(); 164 return result->Get();
165 } 165 }
166 166
167 unsigned EndIndexUntil(UChar ch) const { 167 unsigned EndIndexUntil(UChar ch) const {
168 unsigned length = text_run_.length(); 168 unsigned length = text_run_.length();
169 ASSERT(start_index_ < length); 169 DCHECK_LT(start_index_, length);
170 for (unsigned i = start_index_ + 1;; i++) { 170 for (unsigned i = start_index_ + 1;; i++) {
171 if (i == length || text_run_[i] == ch) 171 if (i == length || text_run_[i] == ch)
172 return i; 172 return i;
173 } 173 }
174 } 174 }
175 175
176 bool NextForAllowTabs(RefPtr<const ShapeResult>* word_result) { 176 bool NextForAllowTabs(RefPtr<const ShapeResult>* word_result) {
177 unsigned length = text_run_.length(); 177 unsigned length = text_run_.length();
178 if (start_index_ >= length) 178 if (start_index_ >= length)
179 return false; 179 return false;
180 180
181 if (UNLIKELY(text_run_[start_index_] == kTabulationCharacter)) { 181 if (UNLIKELY(text_run_[start_index_] == kTabulationCharacter)) {
182 for (unsigned i = start_index_ + 1;; i++) { 182 for (unsigned i = start_index_ + 1;; i++) {
183 if (i == length || text_run_[i] != kTabulationCharacter) { 183 if (i == length || text_run_[i] != kTabulationCharacter) {
184 *word_result = ShapeResult::CreateForTabulationCharacters( 184 *word_result = ShapeResult::CreateForTabulationCharacters(
185 font_, text_run_, width_so_far_, i - start_index_); 185 font_, text_run_, width_so_far_, i - start_index_);
186 start_index_ = i; 186 start_index_ = i;
187 break; 187 break;
188 } 188 }
189 } 189 }
190 } else if (!shape_by_word_) { 190 } else if (!shape_by_word_) {
191 if (!ShapeToEndIndex(word_result, EndIndexUntil(kTabulationCharacter))) 191 if (!ShapeToEndIndex(word_result, EndIndexUntil(kTabulationCharacter)))
192 return false; 192 return false;
193 } else { 193 } else {
194 if (!NextWord(word_result)) 194 if (!NextWord(word_result))
195 return false; 195 return false;
196 } 196 }
197 ASSERT(*word_result); 197 DCHECK(*word_result);
198 width_so_far_ += (*word_result)->Width(); 198 width_so_far_ += (*word_result)->Width();
199 return true; 199 return true;
200 } 200 }
201 201
202 ShapeCache* shape_cache_; 202 ShapeCache* shape_cache_;
203 const TextRun& text_run_; 203 const TextRun& text_run_;
204 const Font* font_; 204 const Font* font_;
205 ShapeResultSpacing spacing_; 205 ShapeResultSpacing spacing_;
206 float width_so_far_; // Used only when allowTabs() 206 float width_so_far_; // Used only when allowTabs()
207 unsigned start_index_ : 31; 207 unsigned start_index_ : 31;
208 unsigned shape_by_word_ : 1; 208 unsigned shape_by_word_ : 1;
209 }; 209 };
210 210
211 } // namespace blink 211 } // namespace blink
212 212
213 #endif // CachingWordShapeIterator_h 213 #endif // CachingWordShapeIterator_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698