diff options
author | kulshin <kulshin@chromium.org> | 2016-02-19 13:36:33 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-19 21:37:12 +0000 |
commit | feee7f74e0a0cd60d91c1aa3a3968432f1177768 (patch) | |
tree | 3211f1d23b4669d2538d95ac9f57e2b6523ba86c /cc | |
parent | e7059cfb59c86cb549d2b29cc020b38f1d157d96 (diff) | |
download | chromium_src-feee7f74e0a0cd60d91c1aa3a3968432f1177768.zip chromium_src-feee7f74e0a0cd60d91c1aa3a3968432f1177768.tar.gz chromium_src-feee7f74e0a0cd60d91c1aa3a3968432f1177768.tar.bz2 |
Make hud layer initialize its own font.
Make hud layer initialize its own font, rather than relying
on a pre-set shared global. This fixes the crash in issue
577663, and as a bonus, allows us to eventually bypass hud
font loading if the hud isn't being displayed.
BUG=577663
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1714653002
Cr-Commit-Position: refs/heads/master@{#376539}
Diffstat (limited to 'cc')
-rw-r--r-- | cc/layers/heads_up_display_layer.cc | 18 | ||||
-rw-r--r-- | cc/layers/heads_up_display_layer.h | 6 | ||||
-rw-r--r-- | cc/layers/heads_up_display_layer_impl.cc | 28 | ||||
-rw-r--r-- | cc/layers/heads_up_display_layer_impl.h | 5 |
4 files changed, 50 insertions, 7 deletions
diff --git a/cc/layers/heads_up_display_layer.cc b/cc/layers/heads_up_display_layer.cc index fe2aa55..a34ca42 100644 --- a/cc/layers/heads_up_display_layer.cc +++ b/cc/layers/heads_up_display_layer.cc @@ -19,7 +19,14 @@ scoped_refptr<HeadsUpDisplayLayer> HeadsUpDisplayLayer::Create( } HeadsUpDisplayLayer::HeadsUpDisplayLayer(const LayerSettings& settings) - : Layer(settings) { + : Layer(settings), + typeface_(skia::AdoptRef( + SkTypeface::CreateFromName("times new roman", SkTypeface::kNormal))) { + if (!typeface_) { + typeface_ = skia::AdoptRef( + SkTypeface::CreateFromName("monospace", SkTypeface::kBold)); + } + DCHECK(typeface_.get()); SetIsDrawable(true); UpdateDrawsContent(HasDrawableContent()); } @@ -67,4 +74,13 @@ void HeadsUpDisplayLayer::SetTypeForProtoSerialization( proto->set_type(proto::LayerNode::HEADS_UP_DISPLAY_LAYER); } +void HeadsUpDisplayLayer::PushPropertiesTo(LayerImpl* layer) { + Layer::PushPropertiesTo(layer); + TRACE_EVENT0("cc", "HeadsUpDisplayLayer::PushPropertiesTo"); + HeadsUpDisplayLayerImpl* layer_impl = + static_cast<HeadsUpDisplayLayerImpl*>(layer); + + layer_impl->SetHUDTypeface(typeface_); +} + } // namespace cc diff --git a/cc/layers/heads_up_display_layer.h b/cc/layers/heads_up_display_layer.h index 554d33e..23b3407a 100644 --- a/cc/layers/heads_up_display_layer.h +++ b/cc/layers/heads_up_display_layer.h @@ -11,6 +11,7 @@ #include "base/memory/scoped_ptr.h" #include "cc/base/cc_export.h" #include "cc/layers/layer.h" +#include "third_party/skia/include/core/SkTypeface.h" namespace cc { @@ -30,6 +31,9 @@ class CC_EXPORT HeadsUpDisplayLayer : public Layer { void SetTypeForProtoSerialization(proto::LayerNode* proto) const override; + // Layer overrides. + void PushPropertiesTo(LayerImpl* layer) override; + protected: explicit HeadsUpDisplayLayer(const LayerSettings& settings); bool HasDrawableContent() const override; @@ -37,6 +41,8 @@ class CC_EXPORT HeadsUpDisplayLayer : public Layer { private: ~HeadsUpDisplayLayer() override; + skia::RefPtr<SkTypeface> typeface_; + DISALLOW_COPY_AND_ASSIGN(HeadsUpDisplayLayer); }; diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc index 035ebc9..55e13e7 100644 --- a/cc/layers/heads_up_display_layer_impl.cc +++ b/cc/layers/heads_up_display_layer_impl.cc @@ -32,7 +32,6 @@ #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size_conversions.h" -#include "ui/gfx/hud_font.h" namespace cc { @@ -74,15 +73,10 @@ double HeadsUpDisplayLayerImpl::Graph::UpdateUpperBound() { HeadsUpDisplayLayerImpl::HeadsUpDisplayLayerImpl(LayerTreeImpl* tree_impl, int id) : LayerImpl(tree_impl, id), - typeface_(gfx::GetHudTypeface()), internal_contents_scale_(1.f), fps_graph_(60.0, 80.0), paint_time_graph_(16.0, 48.0), fade_step_(0) { - if (!typeface_) { - typeface_ = skia::AdoptRef( - SkTypeface::CreateFromName("monospace", SkTypeface::kBold)); - } } HeadsUpDisplayLayerImpl::~HeadsUpDisplayLayerImpl() {} @@ -224,6 +218,25 @@ gfx::Rect HeadsUpDisplayLayerImpl::GetEnclosingRectInTargetSpace() const { return GetScaledEnclosingRectInTargetSpace(internal_contents_scale_); } +void HeadsUpDisplayLayerImpl::SetHUDTypeface( + const skia::RefPtr<SkTypeface>& typeface) { + if (typeface_ == typeface) + return; + + DCHECK(typeface_.get() == nullptr); + typeface_ = typeface; + NoteLayerPropertyChanged(); +} + +void HeadsUpDisplayLayerImpl::PushPropertiesTo(LayerImpl* layer) { + LayerImpl::PushPropertiesTo(layer); + + HeadsUpDisplayLayerImpl* layer_impl = + static_cast<HeadsUpDisplayLayerImpl*>(layer); + + layer_impl->SetHUDTypeface(typeface_); +} + void HeadsUpDisplayLayerImpl::UpdateHudContents() { const LayerTreeDebugState& debug_state = layer_tree_impl()->debug_state(); @@ -275,6 +288,7 @@ void HeadsUpDisplayLayerImpl::DrawHudContents(SkCanvas* canvas) { int HeadsUpDisplayLayerImpl::MeasureText(SkPaint* paint, const std::string& text, int size) const { + DCHECK(typeface_.get()); const bool anti_alias = paint->isAntiAlias(); paint->setAntiAlias(true); paint->setTextSize(size); @@ -291,6 +305,7 @@ void HeadsUpDisplayLayerImpl::DrawText(SkCanvas* canvas, int size, int x, int y) const { + DCHECK(typeface_.get()); const bool anti_alias = paint->isAntiAlias(); paint->setAntiAlias(true); @@ -643,6 +658,7 @@ void HeadsUpDisplayLayerImpl::DrawDebugRect( SkColor fill_color, float stroke_width, const std::string& label_text) const { + DCHECK(typeface_.get()); gfx::Rect debug_layer_rect = gfx::ScaleToEnclosingRect(rect.rect, 1.0 / internal_contents_scale_, 1.0 / internal_contents_scale_); diff --git a/cc/layers/heads_up_display_layer_impl.h b/cc/layers/heads_up_display_layer_impl.h index 07e4bed..dfe9b0d 100644 --- a/cc/layers/heads_up_display_layer_impl.h +++ b/cc/layers/heads_up_display_layer_impl.h @@ -50,6 +50,11 @@ class CC_EXPORT HeadsUpDisplayLayerImpl : public LayerImpl { bool IsAnimatingHUDContents() const { return fade_step_ > 0; } + void SetHUDTypeface(const skia::RefPtr<SkTypeface>& typeface); + + // LayerImpl overrides. + void PushPropertiesTo(LayerImpl* layer) override; + private: class Graph { public: |