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

Side by Side Diff: Source/core/html/canvas/CanvasRenderingContext2D.cpp

Issue 365653002: Oilpan: move 2D Canvas and WebGL objects to the heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Round of improvements Created 6 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 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * Copyright (C) 2007 Alp Toker <alp@atoker.com> 4 * Copyright (C) 2007 Alp Toker <alp@atoker.com>
5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> 6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org>
7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. 8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved.
9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
10 * 10 *
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 } 341 }
342 342
343 void CanvasRenderingContext2D::State::fontsNeedUpdate(CSSFontSelector* fontSelec tor) 343 void CanvasRenderingContext2D::State::fontsNeedUpdate(CSSFontSelector* fontSelec tor)
344 { 344 {
345 ASSERT_ARG(fontSelector, fontSelector == m_font.fontSelector()); 345 ASSERT_ARG(fontSelector, fontSelector == m_font.fontSelector());
346 ASSERT(m_realizedFont); 346 ASSERT(m_realizedFont);
347 347
348 m_font.update(fontSelector); 348 m_font.update(fontSelector);
349 } 349 }
350 350
351 void CanvasRenderingContext2D::State::trace(Visitor* visitor)
352 {
353 visitor->trace(m_strokeStyle);
354 visitor->trace(m_fillStyle);
355 CSSFontSelectorClient::trace(visitor);
356 }
357
351 void CanvasRenderingContext2D::realizeSaves() 358 void CanvasRenderingContext2D::realizeSaves()
352 { 359 {
353 validateStateStack(); 360 validateStateStack();
354 if (state().m_unrealizedSaveCount) { 361 if (state().m_unrealizedSaveCount) {
355 ASSERT(m_stateStack.size() >= 1); 362 ASSERT(m_stateStack.size() >= 1);
356 // Reduce the current state's unrealized count by one now, 363 // Reduce the current state's unrealized count by one now,
357 // to reflect the fact we are saving one state. 364 // to reflect the fact we are saving one state.
358 m_stateStack.last()->m_unrealizedSaveCount--; 365 m_stateStack.last()->m_unrealizedSaveCount--;
359 m_stateStack.append(adoptPtrWillBeNoop(new State(state()))); 366 m_stateStack.append(adoptPtrWillBeNoop(new State(state())));
360 // Set the new state's unrealized count to 0, because it has no outstand ing saves. 367 // Set the new state's unrealized count to 0, because it has no outstand ing saves.
(...skipping 26 matching lines...) Expand all
387 if (c) 394 if (c)
388 c->restore(); 395 c->restore();
389 validateStateStack(); 396 validateStateStack();
390 } 397 }
391 398
392 CanvasStyle* CanvasRenderingContext2D::strokeStyle() const 399 CanvasStyle* CanvasRenderingContext2D::strokeStyle() const
393 { 400 {
394 return state().m_strokeStyle.get(); 401 return state().m_strokeStyle.get();
395 } 402 }
396 403
397 void CanvasRenderingContext2D::setStrokeStyle(PassRefPtr<CanvasStyle> prpStyle) 404 void CanvasRenderingContext2D::setStrokeStyle(PassRefPtrWillBeRawPtr<CanvasStyle > prpStyle)
398 { 405 {
399 RefPtr<CanvasStyle> style = prpStyle; 406 RefPtrWillBeRawPtr<CanvasStyle> style = prpStyle;
400 407
401 if (!style) 408 if (!style)
402 return; 409 return;
403 410
404 if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentColor(*style )) 411 if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentColor(*style ))
405 return; 412 return;
406 413
407 if (style->isCurrentColor()) { 414 if (style->isCurrentColor()) {
408 if (style->hasOverrideAlpha()) 415 if (style->hasOverrideAlpha())
409 style = CanvasStyle::createFromRGBA(colorWithOverrideAlpha(currentCo lor(canvas()), style->overrideAlpha())); 416 style = CanvasStyle::createFromRGBA(colorWithOverrideAlpha(currentCo lor(canvas()), style->overrideAlpha()));
(...skipping 10 matching lines...) Expand all
420 return; 427 return;
421 state().m_strokeStyle->applyStrokeColor(c); 428 state().m_strokeStyle->applyStrokeColor(c);
422 modifiableState().m_unparsedStrokeColor = String(); 429 modifiableState().m_unparsedStrokeColor = String();
423 } 430 }
424 431
425 CanvasStyle* CanvasRenderingContext2D::fillStyle() const 432 CanvasStyle* CanvasRenderingContext2D::fillStyle() const
426 { 433 {
427 return state().m_fillStyle.get(); 434 return state().m_fillStyle.get();
428 } 435 }
429 436
430 void CanvasRenderingContext2D::setFillStyle(PassRefPtr<CanvasStyle> prpStyle) 437 void CanvasRenderingContext2D::setFillStyle(PassRefPtrWillBeRawPtr<CanvasStyle> prpStyle)
431 { 438 {
432 RefPtr<CanvasStyle> style = prpStyle; 439 RefPtrWillBeRawPtr<CanvasStyle> style = prpStyle;
433 440
434 if (!style) 441 if (!style)
435 return; 442 return;
436 443
437 if (state().m_fillStyle && state().m_fillStyle->isEquivalentColor(*style)) 444 if (state().m_fillStyle && state().m_fillStyle->isEquivalentColor(*style))
438 return; 445 return;
439 446
440 if (style->isCurrentColor()) { 447 if (style->isCurrentColor()) {
441 if (style->hasOverrideAlpha()) 448 if (style->hasOverrideAlpha())
442 style = CanvasStyle::createFromRGBA(colorWithOverrideAlpha(currentCo lor(canvas()), style->overrideAlpha())); 449 style = CanvasStyle::createFromRGBA(colorWithOverrideAlpha(currentCo lor(canvas()), style->overrideAlpha()));
(...skipping 1205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1648 GraphicsContext* c = drawingContext(); 1655 GraphicsContext* c = drawingContext();
1649 ASSERT(c); 1656 ASSERT(c);
1650 c->beginLayer(1, state().m_globalComposite); 1657 c->beginLayer(1, state().m_globalComposite);
1651 CompositeOperator previousOperator = c->compositeOperation(); 1658 CompositeOperator previousOperator = c->compositeOperation();
1652 c->setCompositeOperation(CompositeSourceOver); 1659 c->setCompositeOperation(CompositeSourceOver);
1653 strokePrimitive(area, c); 1660 strokePrimitive(area, c);
1654 c->setCompositeOperation(previousOperator); 1661 c->setCompositeOperation(previousOperator);
1655 c->endLayer(); 1662 c->endLayer();
1656 } 1663 }
1657 1664
1658 PassRefPtr<CanvasGradient> CanvasRenderingContext2D::createLinearGradient(float x0, float y0, float x1, float y1) 1665 PassRefPtrWillBeRawPtr<CanvasGradient> CanvasRenderingContext2D::createLinearGra dient(float x0, float y0, float x1, float y1)
1659 { 1666 {
1660 RefPtr<CanvasGradient> gradient = CanvasGradient::create(FloatPoint(x0, y0), FloatPoint(x1, y1)); 1667 RefPtrWillBeRawPtr<CanvasGradient> gradient = CanvasGradient::create(FloatPo int(x0, y0), FloatPoint(x1, y1));
1661 return gradient.release(); 1668 return gradient.release();
1662 } 1669 }
1663 1670
1664 PassRefPtr<CanvasGradient> CanvasRenderingContext2D::createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState& exceptionS tate) 1671 PassRefPtrWillBeRawPtr<CanvasGradient> CanvasRenderingContext2D::createRadialGra dient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState & exceptionState)
1665 { 1672 {
1666 if (r0 < 0 || r1 < 0) { 1673 if (r0 < 0 || r1 < 0) {
1667 exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1")); 1674 exceptionState.throwDOMException(IndexSizeError, String::format("The %s provided is less than 0.", r0 < 0 ? "r0" : "r1"));
1668 return nullptr; 1675 return nullptr;
1669 } 1676 }
1670 1677
1671 RefPtr<CanvasGradient> gradient = CanvasGradient::create(FloatPoint(x0, y0), r0, FloatPoint(x1, y1), r1); 1678 RefPtrWillBeRawPtr<CanvasGradient> gradient = CanvasGradient::create(FloatPo int(x0, y0), r0, FloatPoint(x1, y1), r1);
1672 return gradient.release(); 1679 return gradient.release();
1673 } 1680 }
1674 1681
1675 PassRefPtr<CanvasPattern> CanvasRenderingContext2D::createPattern(CanvasImageSou rce* imageSource, 1682 PassRefPtrWillBeRawPtr<CanvasPattern> CanvasRenderingContext2D::createPattern(Ca nvasImageSource* imageSource,
1676 const String& repetitionType, ExceptionState& exceptionState) 1683 const String& repetitionType, ExceptionState& exceptionState)
1677 { 1684 {
1678 bool repeatX, repeatY; 1685 bool repeatX, repeatY;
1679 CanvasPattern::parseRepetitionType(repetitionType, repeatX, repeatY, excepti onState); 1686 CanvasPattern::parseRepetitionType(repetitionType, repeatX, repeatY, excepti onState);
1680 if (exceptionState.hadException()) 1687 if (exceptionState.hadException())
1681 return nullptr; 1688 return nullptr;
1682 1689
1683 SourceImageStatus status; 1690 SourceImageStatus status;
1684 RefPtr<Image> imageForRendering = imageSource->getSourceImageForCanvas(CopyS ourceImageIfVolatile, &status); 1691 RefPtr<Image> imageForRendering = imageSource->getSourceImageForCanvas(CopyS ourceImageIfVolatile, &status);
1685 1692
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
2055 for (unsigned i = 0; i < textLength; i++) { 2062 for (unsigned i = 0; i < textLength; i++) {
2056 if (isSpaceCharacter(text[i])) 2063 if (isSpaceCharacter(text[i]))
2057 charVector[i] = ' '; 2064 charVector[i] = ' ';
2058 else 2065 else
2059 charVector[i] = text[i]; 2066 charVector[i] = text[i];
2060 } 2067 }
2061 2068
2062 return String(charVector); 2069 return String(charVector);
2063 } 2070 }
2064 2071
2065 PassRefPtr<TextMetrics> CanvasRenderingContext2D::measureText(const String& text ) 2072 PassRefPtrWillBeRawPtr<TextMetrics> CanvasRenderingContext2D::measureText(const String& text)
2066 { 2073 {
2067 RefPtr<TextMetrics> metrics = TextMetrics::create(); 2074 RefPtrWillBeRawPtr<TextMetrics> metrics = TextMetrics::create();
2068 2075
2069 // The style resolution required for rendering text is not available in fram e-less documents. 2076 // The style resolution required for rendering text is not available in fram e-less documents.
2070 if (!canvas()->document().frame()) 2077 if (!canvas()->document().frame())
2071 return metrics.release(); 2078 return metrics.release();
2072 2079
2073 FontCachePurgePreventer fontCachePurgePreventer; 2080 FontCachePurgePreventer fontCachePurgePreventer;
2074 canvas()->document().updateRenderTreeIfNeeded(); 2081 canvas()->document().updateRenderTreeIfNeeded();
2075 const Font& font = accessFont(); 2082 const Font& font = accessFont();
2076 String normalizedText = normalizeSpaces(text); 2083 String normalizedText = normalizeSpaces(text);
2077 const TextRun textRun(normalizedText); 2084 const TextRun textRun(normalizedText);
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
2279 if (enabled == state().m_imageSmoothingEnabled) 2286 if (enabled == state().m_imageSmoothingEnabled)
2280 return; 2287 return;
2281 2288
2282 realizeSaves(); 2289 realizeSaves();
2283 modifiableState().m_imageSmoothingEnabled = enabled; 2290 modifiableState().m_imageSmoothingEnabled = enabled;
2284 GraphicsContext* c = drawingContext(); 2291 GraphicsContext* c = drawingContext();
2285 if (c) 2292 if (c)
2286 c->setImageInterpolationQuality(enabled ? CanvasDefaultInterpolationQual ity : InterpolationNone); 2293 c->setImageInterpolationQuality(enabled ? CanvasDefaultInterpolationQual ity : InterpolationNone);
2287 } 2294 }
2288 2295
2289 PassRefPtr<Canvas2DContextAttributes> CanvasRenderingContext2D::getContextAttrib utes() const 2296 PassRefPtrWillBeRawPtr<Canvas2DContextAttributes> CanvasRenderingContext2D::getC ontextAttributes() const
2290 { 2297 {
2291 RefPtr<Canvas2DContextAttributes> attributes = Canvas2DContextAttributes::cr eate(); 2298 RefPtrWillBeRawPtr<Canvas2DContextAttributes> attributes = Canvas2DContextAt tributes::create();
2292 attributes->setAlpha(m_hasAlpha); 2299 attributes->setAlpha(m_hasAlpha);
2293 return attributes.release(); 2300 return attributes.release();
2294 } 2301 }
2295 2302
2296 void CanvasRenderingContext2D::drawFocusIfNeeded(Element* element) 2303 void CanvasRenderingContext2D::drawFocusIfNeeded(Element* element)
2297 { 2304 {
2298 drawFocusIfNeededInternal(m_path, element); 2305 drawFocusIfNeededInternal(m_path, element);
2299 } 2306 }
2300 2307
2301 void CanvasRenderingContext2D::drawFocusIfNeeded(Path2D* path2d, Element* elemen t) 2308 void CanvasRenderingContext2D::drawFocusIfNeeded(Path2D* path2d, Element* elemen t)
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
2441 2448
2442 unsigned CanvasRenderingContext2D::hitRegionsCount() const 2449 unsigned CanvasRenderingContext2D::hitRegionsCount() const
2443 { 2450 {
2444 if (m_hitRegionManager) 2451 if (m_hitRegionManager)
2445 return m_hitRegionManager->getHitRegionsCount(); 2452 return m_hitRegionManager->getHitRegionsCount();
2446 2453
2447 return 0; 2454 return 0;
2448 } 2455 }
2449 2456
2450 } // namespace WebCore 2457 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698