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

Side by Side Diff: include/core/SkPathRef.h

Issue 25754002: Move makeSpace and resetToSize from SkPathRef.cpp to .h (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | src/core/SkPathRef.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #ifndef SkPathRef_DEFINED 9 #ifndef SkPathRef_DEFINED
10 #define SkPathRef_DEFINED 10 #define SkPathRef_DEFINED
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 void incReserve(int additionalVerbs, int additionalPoints) { 276 void incReserve(int additionalVerbs, int additionalPoints) {
277 SkDEBUGCODE(this->validate();) 277 SkDEBUGCODE(this->validate();)
278 size_t space = additionalVerbs * sizeof(uint8_t) + additionalPoints * si zeof (SkPoint); 278 size_t space = additionalVerbs * sizeof(uint8_t) + additionalPoints * si zeof (SkPoint);
279 this->makeSpace(space); 279 this->makeSpace(space);
280 SkDEBUGCODE(this->validate();) 280 SkDEBUGCODE(this->validate();)
281 } 281 }
282 282
283 /** Resets the path ref with verbCount verbs and pointCount points, all unin itialized. Also 283 /** Resets the path ref with verbCount verbs and pointCount points, all unin itialized. Also
284 * allocates space for reserveVerb additional verbs and reservePoints addit ional points.*/ 284 * allocates space for reserveVerb additional verbs and reservePoints addit ional points.*/
285 void resetToSize(int verbCount, int pointCount, int conicCount, 285 void resetToSize(int verbCount, int pointCount, int conicCount,
286 int reserveVerbs = 0, int reservePoints = 0); 286 int reserveVerbs = 0, int reservePoints = 0) {
287 SkDEBUGCODE(this->validate();)
288 fBoundsIsDirty = true; // this also invalidates fIsFinite
289 fGenerationID = 0;
290
291 size_t newSize = sizeof(uint8_t) * verbCount + sizeof(SkPoint) * pointCo unt;
292 size_t newReserve = sizeof(uint8_t) * reserveVerbs + sizeof(SkPoint) * r eservePoints;
293 size_t minSize = newSize + newReserve;
294
295 ptrdiff_t sizeDelta = this->currSize() - minSize;
296
297 if (sizeDelta < 0 || static_cast<size_t>(sizeDelta) >= 3 * minSize) {
298 sk_free(fPoints);
299 fPoints = NULL;
300 fVerbs = NULL;
301 fFreeSpace = 0;
302 fVerbCnt = 0;
303 fPointCnt = 0;
304 this->makeSpace(minSize);
305 fVerbCnt = verbCount;
306 fPointCnt = pointCount;
307 fFreeSpace -= newSize;
308 } else {
309 fPointCnt = pointCount;
310 fVerbCnt = verbCount;
311 fFreeSpace = this->currSize() - minSize;
312 }
313 fConicWeights.setCount(conicCount);
314 SkDEBUGCODE(this->validate();)
315 }
287 316
288 /** 317 /**
289 * Increases the verb count by newVerbs and the point count be newPoints. Ne w verbs and points 318 * Increases the verb count by newVerbs and the point count be newPoints. Ne w verbs and points
290 * are uninitialized. 319 * are uninitialized.
291 */ 320 */
292 void grow(int newVerbs, int newPoints) { 321 void grow(int newVerbs, int newPoints) {
293 SkDEBUGCODE(this->validate();) 322 SkDEBUGCODE(this->validate();)
294 size_t space = newVerbs * sizeof(uint8_t) + newPoints * sizeof (SkPoint) ; 323 size_t space = newVerbs * sizeof(uint8_t) + newPoints * sizeof (SkPoint) ;
295 this->makeSpace(space); 324 this->makeSpace(space);
296 fVerbCnt += newVerbs; 325 fVerbCnt += newVerbs;
297 fPointCnt += newPoints; 326 fPointCnt += newPoints;
298 fFreeSpace -= space; 327 fFreeSpace -= space;
299 fBoundsIsDirty = true; // this also invalidates fIsFinite 328 fBoundsIsDirty = true; // this also invalidates fIsFinite
300 SkDEBUGCODE(this->validate();) 329 SkDEBUGCODE(this->validate();)
301 } 330 }
302 331
303 /** 332 /**
304 * Increases the verb count 1, records the new verb, and creates room for th e requisite number 333 * Increases the verb count 1, records the new verb, and creates room for th e requisite number
305 * of additional points. A pointer to the first point is returned. Any new p oints are 334 * of additional points. A pointer to the first point is returned. Any new p oints are
306 * uninitialized. 335 * uninitialized.
307 */ 336 */
308 SkPoint* growForVerb(int /*SkPath::Verb*/ verb); 337 SkPoint* growForVerb(int /*SkPath::Verb*/ verb);
309 338
310 /** 339 /**
311 * Ensures that the free space available in the path ref is >= size. The ver b and point counts 340 * Ensures that the free space available in the path ref is >= size. The ver b and point counts
312 * are not changed. 341 * are not changed.
313 */ 342 */
314 void makeSpace(size_t size); 343 void makeSpace(size_t size) {
344 SkDEBUGCODE(this->validate();)
345 ptrdiff_t growSize = size - fFreeSpace;
346 if (growSize <= 0) {
347 return;
348 }
349 size_t oldSize = this->currSize();
350 // round to next multiple of 8 bytes
351 growSize = (growSize + 7) & ~static_cast<size_t>(7);
352 // we always at least double the allocation
353 if (static_cast<size_t>(growSize) < oldSize) {
354 growSize = oldSize;
355 }
356 if (growSize < kMinSize) {
357 growSize = kMinSize;
358 }
359 size_t newSize = oldSize + growSize;
360 // Note that realloc could memcpy more than we need. It seems to be a wi n anyway. TODO:
361 // encapsulate this.
362 fPoints = reinterpret_cast<SkPoint*>(sk_realloc_throw(fPoints, newSize)) ;
363 size_t oldVerbSize = fVerbCnt * sizeof(uint8_t);
364 void* newVerbsDst = reinterpret_cast<void*>(
365 reinterpret_cast<intptr_t>(fPoints) + newSize - oldVerbSize);
366 void* oldVerbsSrc = reinterpret_cast<void*>(
367 reinterpret_cast<intptr_t>(fPoints) + oldSize - oldVerbSize);
368 memmove(newVerbsDst, oldVerbsSrc, oldVerbSize);
369 fVerbs = reinterpret_cast<uint8_t*>(reinterpret_cast<intptr_t>(fPoints) + newSize);
370 fFreeSpace += growSize;
371 SkDEBUGCODE(this->validate();)
372 }
315 373
316 /** 374 /**
317 * Private, non-const-ptr version of the public function verbsMemBegin(). 375 * Private, non-const-ptr version of the public function verbsMemBegin().
318 */ 376 */
319 uint8_t* verbsMemWritable() { 377 uint8_t* verbsMemWritable() {
320 SkDEBUGCODE(this->validate();) 378 SkDEBUGCODE(this->validate();)
321 return fVerbs - fVerbCnt; 379 return fVerbs - fVerbCnt;
322 } 380 }
323 381
324 /** 382 /**
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 enum { 414 enum {
357 kEmptyGenID = 1, // GenID reserved for path ref with zero points and zer o verbs. 415 kEmptyGenID = 1, // GenID reserved for path ref with zero points and zer o verbs.
358 }; 416 };
359 mutable int32_t fGenerationID; 417 mutable int32_t fGenerationID;
360 SkDEBUGCODE(int32_t fEditorsAttached;) // assert that only one editor in use at any time. 418 SkDEBUGCODE(int32_t fEditorsAttached;) // assert that only one editor in use at any time.
361 419
362 typedef SkRefCnt INHERITED; 420 typedef SkRefCnt INHERITED;
363 }; 421 };
364 422
365 #endif 423 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkPathRef.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698