summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorkulshin <kulshin@chromium.org>2016-02-19 13:36:33 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-19 21:37:12 +0000
commitfeee7f74e0a0cd60d91c1aa3a3968432f1177768 (patch)
tree3211f1d23b4669d2538d95ac9f57e2b6523ba86c /cc
parente7059cfb59c86cb549d2b29cc020b38f1d157d96 (diff)
downloadchromium_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.cc18
-rw-r--r--cc/layers/heads_up_display_layer.h6
-rw-r--r--cc/layers/heads_up_display_layer_impl.cc28
-rw-r--r--cc/layers/heads_up_display_layer_impl.h5
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: