OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. |
3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
80 : HTMLElement(canvasTag, document) | 80 : HTMLElement(canvasTag, document) |
81 , DocumentVisibilityObserver(document) | 81 , DocumentVisibilityObserver(document) |
82 , m_size(DefaultWidth, DefaultHeight) | 82 , m_size(DefaultWidth, DefaultHeight) |
83 , m_ignoreReset(false) | 83 , m_ignoreReset(false) |
84 , m_accelerationDisabled(false) | 84 , m_accelerationDisabled(false) |
85 , m_externallyAllocatedMemory(0) | 85 , m_externallyAllocatedMemory(0) |
86 , m_originClean(true) | 86 , m_originClean(true) |
87 , m_didFailToCreateImageBuffer(false) | 87 , m_didFailToCreateImageBuffer(false) |
88 , m_didClearImageBuffer(false) | 88 , m_didClearImageBuffer(false) |
89 { | 89 { |
90 setHasCustomStyleCallbacks(); | |
90 } | 91 } |
91 | 92 |
92 DEFINE_NODE_FACTORY(HTMLCanvasElement) | 93 DEFINE_NODE_FACTORY(HTMLCanvasElement) |
93 | 94 |
94 HTMLCanvasElement::~HTMLCanvasElement() | 95 HTMLCanvasElement::~HTMLCanvasElement() |
95 { | 96 { |
96 resetDirtyRect(); | 97 resetDirtyRect(); |
97 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_external lyAllocatedMemory); | 98 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(-m_external lyAllocatedMemory); |
98 #if !ENABLE(OILPAN) | 99 #if !ENABLE(OILPAN) |
99 HashSet<RawPtr<CanvasObserver> >::iterator end = m_observers.end(); | 100 HashSet<RawPtr<CanvasObserver> >::iterator end = m_observers.end(); |
(...skipping 13 matching lines...) Expand all Loading... | |
113 } | 114 } |
114 | 115 |
115 RenderObject* HTMLCanvasElement::createRenderer(RenderStyle* style) | 116 RenderObject* HTMLCanvasElement::createRenderer(RenderStyle* style) |
116 { | 117 { |
117 LocalFrame* frame = document().frame(); | 118 LocalFrame* frame = document().frame(); |
118 if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript)) | 119 if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript)) |
119 return new RenderHTMLCanvas(this); | 120 return new RenderHTMLCanvas(this); |
120 return HTMLElement::createRenderer(style); | 121 return HTMLElement::createRenderer(style); |
121 } | 122 } |
122 | 123 |
124 void HTMLCanvasElement::didRecalcStyle(StyleRecalcChange) | |
125 { | |
126 if (!hasImageBuffer()) | |
127 return; | |
128 m_imageBuffer->setFilterLevel(computedStyle()->imageRendering() == ImageRend eringPixelated ? SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel); | |
129 } | |
130 | |
123 Node::InsertionNotificationRequest HTMLCanvasElement::insertedInto(ContainerNode * node) | 131 Node::InsertionNotificationRequest HTMLCanvasElement::insertedInto(ContainerNode * node) |
124 { | 132 { |
125 setIsInCanvasSubtree(true); | 133 setIsInCanvasSubtree(true); |
126 return HTMLElement::insertedInto(node); | 134 return HTMLElement::insertedInto(node); |
127 } | 135 } |
128 | 136 |
129 void HTMLCanvasElement::addObserver(CanvasObserver* observer) | 137 void HTMLCanvasElement::addObserver(CanvasObserver* observer) |
130 { | 138 { |
131 m_observers.add(observer); | 139 m_observers.add(observer); |
132 } | 140 } |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
527 // pixel readback, but that is unavoidable in this case. | 535 // pixel readback, but that is unavoidable in this case. |
528 // FIXME: Actually, avoid setting m_accelerationDisabled at all when | 536 // FIXME: Actually, avoid setting m_accelerationDisabled at all when |
529 // doing GPU-based rasterization. | 537 // doing GPU-based rasterization. |
530 if (m_accelerationDisabled) | 538 if (m_accelerationDisabled) |
531 return adoptPtr(new UnacceleratedImageBufferSurface(deviceSize, opac ityMode)); | 539 return adoptPtr(new UnacceleratedImageBufferSurface(deviceSize, opac ityMode)); |
532 return adoptPtr(new WebGLImageBufferSurface(deviceSize, opacityMode)); | 540 return adoptPtr(new WebGLImageBufferSurface(deviceSize, opacityMode)); |
533 } | 541 } |
534 | 542 |
535 OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = createSu rfaceFactory(deviceSize, msaaSampleCount); | 543 OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = createSu rfaceFactory(deviceSize, msaaSampleCount); |
536 | 544 |
537 if (RuntimeEnabledFeatures::displayList2dCanvasEnabled()) { | 545 if (RuntimeEnabledFeatures::displayList2dCanvasEnabled() && false) { |
Justin Novosad
2014/11/18 16:32:50
Do not hard-code disable the displayList2dCanvas f
jackhou1
2014/12/01 07:00:08
Removed.
Sorry, added this when I was debugging.
| |
538 OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSu rface(deviceSize, surfaceFactory.release(), opacityMode)); | 546 OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSu rface(deviceSize, surfaceFactory.release(), opacityMode)); |
539 if (surface->isValid()) | 547 if (surface->isValid()) |
540 return surface.release(); | 548 return surface.release(); |
541 surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // r ecreate because old previous one was released | 549 surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // r ecreate because old previous one was released |
542 } | 550 } |
543 | 551 |
544 return surfaceFactory->createSurface(deviceSize, opacityMode); | 552 return surfaceFactory->createSurface(deviceSize, opacityMode); |
545 } | 553 } |
546 | 554 |
547 void HTMLCanvasElement::createImageBuffer() | 555 void HTMLCanvasElement::createImageBuffer() |
(...skipping 21 matching lines...) Expand all Loading... | |
569 if (!deviceSize.width() || !deviceSize.height()) | 577 if (!deviceSize.width() || !deviceSize.height()) |
570 return; | 578 return; |
571 | 579 |
572 int msaaSampleCount; | 580 int msaaSampleCount; |
573 OwnPtr<ImageBufferSurface> surface = createImageBufferSurface(deviceSize, &m saaSampleCount); | 581 OwnPtr<ImageBufferSurface> surface = createImageBufferSurface(deviceSize, &m saaSampleCount); |
574 if (!surface->isValid()) | 582 if (!surface->isValid()) |
575 return; | 583 return; |
576 | 584 |
577 m_imageBuffer = ImageBuffer::create(surface.release()); | 585 m_imageBuffer = ImageBuffer::create(surface.release()); |
578 m_imageBuffer->setClient(this); | 586 m_imageBuffer->setClient(this); |
587 m_imageBuffer->setFilterLevel(computedStyle()->imageRendering() == ImageRend eringPixelated ? SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel); | |
579 | 588 |
580 m_didFailToCreateImageBuffer = false; | 589 m_didFailToCreateImageBuffer = false; |
581 | 590 |
582 updateExternallyAllocatedMemory(); | 591 updateExternallyAllocatedMemory(); |
583 | 592 |
584 if (is3D()) { | 593 if (is3D()) { |
585 // Early out for WebGL canvases | 594 // Early out for WebGL canvases |
586 return; | 595 return; |
587 } | 596 } |
588 | 597 |
589 m_imageBuffer->setClient(this); | 598 m_imageBuffer->setClient(this); |
590 m_imageBuffer->context()->setShouldClampToSourceRect(false); | 599 m_imageBuffer->context()->setShouldClampToSourceRect(false); |
591 m_imageBuffer->context()->disableAntialiasingOptimizationForHairlineImages() ; | 600 m_imageBuffer->context()->disableAntialiasingOptimizationForHairlineImages() ; |
592 m_imageBuffer->context()->setImageInterpolationQuality(CanvasDefaultInterpol ationQuality); | 601 m_imageBuffer->context()->setImageInterpolationQuality(computedStyle()->imag eRendering() == ImageRenderingOptimizeContrast ? InterpolationLow : CanvasDefaul tInterpolationQuality); |
593 // Enabling MSAA overrides a request to disable antialiasing. This is true r egardless of whether the | 602 // Enabling MSAA overrides a request to disable antialiasing. This is true r egardless of whether the |
594 // rendering mode is accelerated or not. For consistency, we don't want to a pply AA in accelerated | 603 // rendering mode is accelerated or not. For consistency, we don't want to a pply AA in accelerated |
595 // canvases but not in unaccelerated canvases. | 604 // canvases but not in unaccelerated canvases. |
596 if (!msaaSampleCount && document().settings() && !document().settings()->ant ialiased2dCanvasEnabled()) | 605 if (!msaaSampleCount && document().settings() && !document().settings()->ant ialiased2dCanvasEnabled()) |
597 m_imageBuffer->context()->setShouldAntialias(false); | 606 m_imageBuffer->context()->setShouldAntialias(false); |
598 // GraphicsContext's defaults don't always agree with the 2d canvas spec. | 607 // GraphicsContext's defaults don't always agree with the 2d canvas spec. |
599 // See CanvasRenderingContext2D::State::State() for more information. | 608 // See CanvasRenderingContext2D::State::State() for more information. |
600 m_imageBuffer->context()->setMiterLimit(10); | 609 m_imageBuffer->context()->setMiterLimit(10); |
601 m_imageBuffer->context()->setStrokeThickness(1); | 610 m_imageBuffer->context()->setStrokeThickness(1); |
602 #if ENABLE(ASSERT) | 611 #if ENABLE(ASSERT) |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
762 if (!width() || !height()) { | 771 if (!width() || !height()) { |
763 *status = ZeroSizeCanvasSourceImageStatus; | 772 *status = ZeroSizeCanvasSourceImageStatus; |
764 return nullptr; | 773 return nullptr; |
765 } | 774 } |
766 | 775 |
767 if (!buffer()) { | 776 if (!buffer()) { |
768 *status = InvalidSourceImageStatus; | 777 *status = InvalidSourceImageStatus; |
769 return nullptr; | 778 return nullptr; |
770 } | 779 } |
771 | 780 |
781 m_imageBuffer->willAccessPixels(); | |
782 | |
772 if (m_context && m_context->is3d()) { | 783 if (m_context && m_context->is3d()) { |
773 m_context->paintRenderingResultsToCanvas(); | 784 m_context->paintRenderingResultsToCanvas(); |
774 *status = ExternalSourceImageStatus; | 785 *status = ExternalSourceImageStatus; |
775 | 786 |
776 // can't create SkImage from WebGLImageBufferSurface (contains only SkBi tmap) | 787 // can't create SkImage from WebGLImageBufferSurface (contains only SkBi tmap) |
777 return m_imageBuffer->copyImage(DontCopyBackingStore, Unscaled); | 788 return m_imageBuffer->copyImage(DontCopyBackingStore, Unscaled); |
778 } | 789 } |
779 | 790 |
780 RefPtr<SkImage> image = m_imageBuffer->newImageSnapshot(); | 791 RefPtr<SkImage> image = m_imageBuffer->newImageSnapshot(); |
781 if (image) { | 792 if (image) { |
(...skipping 12 matching lines...) Expand all Loading... | |
794 { | 805 { |
795 return !originClean(); | 806 return !originClean(); |
796 } | 807 } |
797 | 808 |
798 FloatSize HTMLCanvasElement::sourceSize() const | 809 FloatSize HTMLCanvasElement::sourceSize() const |
799 { | 810 { |
800 return FloatSize(width(), height()); | 811 return FloatSize(width(), height()); |
801 } | 812 } |
802 | 813 |
803 } | 814 } |
OLD | NEW |