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

Side by Side Diff: Source/core/css/CSSPrimitiveValue.h

Issue 1268683002: CSSValue Immediates: Micro-optimize reinterpret_casts for immediates (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@tagged_ptrs_base
Patch Set: Created 5 years, 4 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
« no previous file with comments | « no previous file | no next file » | 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 * (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 inline bool isTaggedPtr() const 438 inline bool isTaggedPtr() const
439 { 439 {
440 return reinterpret_cast<uintptr_t>(this) & 1; 440 return reinterpret_cast<uintptr_t>(this) & 1;
441 } 441 }
442 442
443 static inline CSSPrimitiveValue* toPtr(CSSTaggedPtrValue taggedPtr) 443 static inline CSSPrimitiveValue* toPtr(CSSTaggedPtrValue taggedPtr)
444 { 444 {
445 return reinterpret_cast<CSSPrimitiveValue*&>(taggedPtr); 445 return reinterpret_cast<CSSPrimitiveValue*&>(taggedPtr);
446 } 446 }
447 447
448 inline CSSTaggedPtrValue toTaggedPtr() const
449 {
450 CSSPrimitiveValue* nonConstThis = const_cast<CSSPrimitiveValue*>(this);
451 return reinterpret_cast<CSSTaggedPtrValue&&>(nonConstThis);
452 }
453
454 inline UnitType type() const 448 inline UnitType type() const
455 { 449 {
456 if (!isTaggedPtr()) 450 if (!isTaggedPtr())
457 return static_cast<UnitType>(m_primitiveUnitType); 451 return static_cast<UnitType>(m_primitiveUnitType);
458 return static_cast<UnitType>(toTaggedPtr().type); 452
453 const CSSPrimitiveValue* const& lValue = this;
454 const CSSTaggedPtrValue& taggedPtr = reinterpret_cast<const CSSTaggedPtr Value&>(lValue);
455 return static_cast<UnitType>(taggedPtr.type);
459 } 456 }
460 457
461 inline CSSPrimitiveValueData value() const 458 inline CSSPrimitiveValueData value() const
462 { 459 {
463 if (!isTaggedPtr()) 460 if (!isTaggedPtr())
464 return m_value; 461 return m_value;
465 462
466 CSSPrimitiveValueData data; 463 CSSPrimitiveValueData data;
464 const CSSPrimitiveValue* const& lValue = this;
465 const CSSTaggedPtrValue& taggedPtr = reinterpret_cast<const CSSTaggedPtr Value&>(lValue);
467 switch (type()) { 466 switch (type()) {
468 case CSSPrimitiveValue::CSS_PROPERTY_ID: 467 case CSSPrimitiveValue::CSS_PROPERTY_ID:
469 data.propertyID = static_cast<CSSPropertyID>(toTaggedPtr().value); 468 data.propertyID = static_cast<CSSPropertyID>(taggedPtr.value);
470 break; 469 break;
471 case CSSPrimitiveValue::CSS_VALUE_ID: 470 case CSSPrimitiveValue::CSS_VALUE_ID:
472 data.valueID = static_cast<CSSValueID>(toTaggedPtr().value); 471 data.valueID = static_cast<CSSValueID>(taggedPtr.value);
473 break; 472 break;
474 case CSSPrimitiveValue::CSS_RGBCOLOR: { 473 case CSSPrimitiveValue::CSS_RGBCOLOR: {
475 uintptr_t valueRawVar = toTaggedPtr().value; 474 uintptr_t colorRaw = taggedPtr.value;
476 packedColor color = *reinterpret_cast<packedColor*>(&valueRawVar); 475 packedColor color = reinterpret_cast<packedColor&>(colorRaw);
477 unsigned alpha; 476 unsigned alpha;
478 #if CPU(32BIT) 477 #if CPU(32BIT)
479 alpha = color.alpha == 1 ? 255 : 0; 478 alpha = color.alpha == 1 ? 255 : 0;
480 #elif CPU(64BIT) 479 #elif CPU(64BIT)
481 alpha = color.alpha; 480 alpha = color.alpha;
482 #endif 481 #endif
483 data.rgbcolor = makeRGBA(color.red, color.green, color.blue, alpha); 482 data.rgbcolor = makeRGBA(color.red, color.green, color.blue, alpha);
484 break; 483 break;
485 } 484 }
486 default: 485 default:
487 uint64_t shiftedValue = toTaggedPtr().value; 486 uint64_t shiftedValue = taggedPtr.value;
488 shiftedValue = shiftedValue << doubleShiftAmount; 487 shiftedValue = shiftedValue << doubleShiftAmount;
489 data.num = *reinterpret_cast<double*>(&shiftedValue); 488 data.num = reinterpret_cast<double&>(shiftedValue);
490 break; 489 break;
491 } 490 }
492 return data; 491 return data;
493 } 492 }
494 493
495 CSSPrimitiveValueData m_value; 494 CSSPrimitiveValueData m_value;
496 }; 495 };
497 496
498 typedef CSSPrimitiveValue::CSSLengthArray CSSLengthArray; 497 typedef CSSPrimitiveValue::CSSLengthArray CSSLengthArray;
499 typedef CSSPrimitiveValue::CSSLengthTypeArray CSSLengthTypeArray; 498 typedef CSSPrimitiveValue::CSSLengthTypeArray CSSLengthTypeArray;
(...skipping 11 matching lines...) Expand all
511 // Immediates (non-pointers) end in a 1. 510 // Immediates (non-pointers) end in a 1.
512 if (!(reinterpret_cast<uintptr_t>(p) & 1)) 511 if (!(reinterpret_cast<uintptr_t>(p) & 1))
513 adopted(p); 512 adopted(p);
514 return PassRefPtr<blink::CSSPrimitiveValue>(p, PassRefPtr<blink::CSSPrimitiv eValue>::AdoptRef); 513 return PassRefPtr<blink::CSSPrimitiveValue>(p, PassRefPtr<blink::CSSPrimitiv eValue>::AdoptRef);
515 } 514 }
516 #endif 515 #endif
517 516
518 } // namespace WTF 517 } // namespace WTF
519 518
520 #endif // CSSPrimitiveValue_h 519 #endif // CSSPrimitiveValue_h
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698