New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 603830 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Apr 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 1
Type: Bug

Blocking:
issue 501642



Sign in to add a comment

ASSERTION FAILED: m_realizedFont: /third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp(271)

Project Member Reported by henrika@chromium.org, Apr 15 2016

Issue description

See this today for this URL: https://sound.io/latency/

I build on Mac and use Debug mode.

Chromium	52.0.2710.0 (Developer Build) (64-bit)
Revision	c1c48b4f6dd9da34d43b0f2a793a394457e8e8fa-refs/heads/master@{#387559}
OS	Mac OS X 
Blink	537.36 (@c1c48b4f6dd9da34d43b0f2a793a394457e8e8fa)
JavaScript	V8 5.2.41

ASSERTION FAILED: m_realizedFont
../../third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp(271) : const blink::Font &blink::CanvasRenderingContext2DState::font() const
1   0x1294e355d blink::CanvasRenderingContext2DState::font() const
2   0x1294c6f7e blink::CanvasRenderingContext2D::accessFont()
3   0x1294c6e78 blink::CanvasRenderingContext2D::stateHasFilter()
4   0x1294c6fda non-virtual thunk to blink::CanvasRenderingContext2D::stateHasFilter()
5   0x1294adfb5 bool blink::BaseRenderingContext2D::draw<blink::BaseRenderingContext2D::drawPathInternal(blink::Path const&, blink::CanvasRenderingContext2DState::PaintType, SkPath::FillType)::$_0, blink::BaseRenderingContext2D::drawPathInternal(blink::Path const&, blink::CanvasRenderingContext2DState::PaintType, SkPath::FillType)::$_1>(blink::BaseRenderingContext2D::drawPathInternal(blink::Path const&, blink::CanvasRenderingContext2DState::PaintType, SkPath::FillType)::$_0 const&, blink::BaseRenderingContext2D::drawPathInternal(blink::Path const&, blink::CanvasRenderingContext2DState::PaintType, SkPath::FillType)::$_1 const&, SkRect const&, blink::CanvasRenderingContext2DState::PaintType, blink::CanvasRenderingContext2DState::ImageType)
6   0x1294adc1c blink::BaseRenderingContext2D::drawPathInternal(blink::Path const&, blink::CanvasRenderingContext2DState::PaintType, SkPath::FillType)
7   0x1294ae5e0 blink::BaseRenderingContext2D::stroke()
8   0x129f0e215 blink::CanvasRenderingContext2DV8Internal::stroke1Method(v8::FunctionCallbackInfo<v8::Value> const&)
9   0x129f0e0f4 blink::CanvasRenderingContext2DV8Internal::strokeMethod(v8::FunctionCallbackInfo<v8::Value> const&)
10  0x129f04293 blink::CanvasRenderingContext2DV8Internal::strokeMethodCallback(v8::FunctionCallbackInfo<v8::Value> const&)
11  0x1276f35db v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
12  0x12774de7a v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
13  0x127786c59 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>, v8::internal::Isolate*)
14  0x12775a1be v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
15  0x350b426093e7
Received signal 11 SEGV_MAPERR 0000fbadbeef
 [0x0001172da2df]
 [0x0001172da483]
 [0x0001172da237]
 [0x7fff9005852a]
 [0x6f6d2f656372756f]
 [0x0001294c6f7e]
 [0x0001294c6e78]
 [0x0001294c6fda]
 [0x0001294adfb5]
 [0x0001294adc1c]
 [0x0001294ae5e0]
 [0x000129f0e215]
 [0x000129f0e0f4]
 [0x000129f04293]
 [0x0001276f35db]
 [0x00012774de7a]
 [0x000127786c59]
 [0x00012775a1be]
 [0x350b426093e7]
[end of stack trace]
 
Cc: junov@chromium.org
Components: Blink>Canvas

Comment 2 by ajuma@chromium.org, Apr 18 2016

Owner: ajuma@chromium.org
Status: Assigned (was: Untriaged)

Comment 3 by ajuma@chromium.org, Apr 19 2016

Blocking: 501642
The assertion is no longer failing on this particular page after https://codereview.chromium.org/1886063002/. But that just postpones the problem until either setFilter is called, or we try to construct a filter when drawing.

The real problems are that for frameless documents:
1) We cannot construct a StyleResolver (see  issue 343801  for context), so we cannot call accessFont() in CanvasRenderingContext2D::snapshotStateForFilter.
2) We cannot construct a StyleResolverState (which we need in order to build the filter in CanvasRenderingContext2DState::getFilter) since that constructs a FontBuilder, and FontBuilder's constructor asserts that the document has a frame.

For now, I think we should follow the approach of CanvasRenderingContext2D::setFont, and skip filter building for frameless documents. We'll need a better solution for OffscreenCanvas (perhaps refactoring the style code so we're still able to construct filters that don't depend on font size in this situation).

Here's an example that triggers this issue.

<script>
var htmlDoc = document.implementation.createHTMLDocument('', '', null);
var canvas = htmlDoc.createElement('canvas');
var ctx = canvas.getContext('2d');

ctx.filter = 'drop-shadow(10px 10px black)';
ctx.fillRect(25, 25, 50, 40);
</script>


Comment 5 by ajuma@chromium.org, Apr 20 2016

Status: Fixed (was: Assigned)

Sign in to add a comment