Skip to content

Commit

Permalink
Add flag to enable rendering of text using signed distance fields.
Browse files Browse the repository at this point in the history
This change plumbs through a flag that turns on distance
field text in Skia when doing GPU rasterization, as requested
by vangelis@chromium.org.

BUG=368468

Review URL: https://codereview.chromium.org/266743003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@268758 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
jvanverth@google.com committed May 7, 2014
1 parent 00681f0 commit b242b14
Show file tree
Hide file tree
Showing 32 changed files with 169 additions and 80 deletions.
3 changes: 2 additions & 1 deletion cc/layers/tiled_layer_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ class TiledLayerTest : public testing::Test {
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(proxy_);
resource_provider_ = ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1);
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false);
host_impl_ = make_scoped_ptr(
new FakeLayerTreeHostImpl(proxy_, shared_bitmap_manager_.get()));
}
Expand Down
33 changes: 17 additions & 16 deletions cc/output/gl_renderer_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@ class GLRendererWithDefaultHarnessTest : public GLRendererTest {
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ =
ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
.Pass();
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false).Pass();
renderer_ = make_scoped_ptr(new FakeRendererGL(&renderer_client_,
&settings_,
output_surface_.get(),
Expand Down Expand Up @@ -191,8 +191,8 @@ class GLRendererShaderTest : public GLRendererTest {
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ =
ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
.Pass();
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false).Pass();
renderer_.reset(new FakeRendererGL(&renderer_client_,
&settings_,
output_surface_.get(),
Expand Down Expand Up @@ -504,7 +504,7 @@ TEST_F(GLRendererTest, InitializationDoesNotMakeSynchronousCalls) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -540,7 +540,7 @@ TEST_F(GLRendererTest, InitializationWithQuicklyLostContextDoesNotAssert) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -573,7 +573,7 @@ TEST_F(GLRendererTest, OpaqueBackground) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -619,7 +619,7 @@ TEST_F(GLRendererTest, TransparentBackground) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -658,7 +658,7 @@ TEST_F(GLRendererTest, OffscreenOutputSurface) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -739,7 +739,7 @@ TEST_F(GLRendererTest, VisibilityChangeIsLastCall) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -803,7 +803,7 @@ TEST_F(GLRendererTest, ActiveTextureState) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -882,7 +882,7 @@ TEST_F(GLRendererTest, ShouldClearRootRenderPass) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
settings.should_clear_root_render_pass = false;
Expand Down Expand Up @@ -974,7 +974,7 @@ TEST_F(GLRendererTest, ScissorTestWhenClearing) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -1067,7 +1067,7 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
settings.partial_swap_enabled = true;
Expand Down Expand Up @@ -1252,7 +1252,7 @@ TEST_F(GLRendererTest, ScissorAndViewportWithinNonreshapableSurface) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1));
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false));

LayerTreeSettings settings;
FakeRendererClient renderer_client;
Expand Down Expand Up @@ -1627,7 +1627,8 @@ class MockOutputSurfaceTest : public GLRendererTest {
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ =
ResourceProvider::Create(
&output_surface_, shared_bitmap_manager_.get(), 0, false, 1).Pass();
&output_surface_, shared_bitmap_manager_.get(), 0, false, 1, false)
.Pass();

renderer_.reset(new FakeRendererGL(&renderer_client_,
&settings_,
Expand Down
8 changes: 5 additions & 3 deletions cc/output/overlay_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ TEST(OverlayTest, OverlaysProcessorHasStrategy) {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create(
&output_surface, shared_bitmap_manager.get(), 0, false, 1));
&output_surface, shared_bitmap_manager.get(), 0, false, 1, false));

scoped_ptr<DefaultOverlayProcessor> overlay_processor(
new DefaultOverlayProcessor(&output_surface, resource_provider.get()));
Expand All @@ -232,7 +232,8 @@ class SingleOverlayOnTopTest : public testing::Test {

shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ = ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1);
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false);

overlay_processor_.reset(new SingleOverlayProcessor(
output_surface_.get(), resource_provider_.get()));
Expand Down Expand Up @@ -510,7 +511,8 @@ class GLRendererWithOverlaysTest : public testing::Test {
output_surface_.reset(new OverlayOutputSurface(provider_));
CHECK(output_surface_->BindToClient(&output_surface_client_));
resource_provider_ =
ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1,
false);

provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind(
&MockOverlayScheduler::Schedule, base::Unretained(&scheduler_)));
Expand Down
3 changes: 2 additions & 1 deletion cc/output/renderer_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ class RendererTest : public ::testing::Test {
output_surface_.reset(new OutputSurface(context_provider_));
output_surface_->BindToClient(&output_surface_client_);
resource_provider_ =
ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1,
false);
renderer_ = CreateRenderer<T>(&renderer_client_,
&tree_settings_,
output_surface_.get(),
Expand Down
3 changes: 2 additions & 1 deletion cc/output/software_renderer_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ class SoftwareRendererTest : public testing::Test, public RendererClient {

shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ = ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1);
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false);
renderer_ = SoftwareRenderer::Create(
this, &settings_, output_surface_.get(), resource_provider());
}
Expand Down
2 changes: 1 addition & 1 deletion cc/resources/picture_layer_tiling_set_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class PictureLayerTilingSetTestWithResources : public testing::Test {
scoped_ptr<SharedBitmapManager> shared_bitmap_manager(
new TestSharedBitmapManager());
scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create(
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1);
output_surface.get(), shared_bitmap_manager.get(), 0, false, 1, false);

FakePictureLayerTilingClient client(resource_provider.get());
client.SetTileSize(gfx::Size(256, 256));
Expand Down
2 changes: 1 addition & 1 deletion cc/resources/picture_layer_tiling_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -948,7 +948,7 @@ TEST(PictureLayerTilingTest, TilingEvictionTileIteratorStaticViewport) {
CHECK(output_surface->BindToClient(&output_surface_client));
TestSharedBitmapManager shared_bitmap_manager;
scoped_ptr<ResourceProvider> resource_provider = ResourceProvider::Create(
output_surface.get(), &shared_bitmap_manager, 0, false, 1);
output_surface.get(), &shared_bitmap_manager, 0, false, 1, false);

FakePictureLayerTilingClient client(resource_provider.get());
scoped_ptr<TestablePictureLayerTiling> tiling;
Expand Down
3 changes: 2 additions & 1 deletion cc/resources/prioritized_resource_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ class PrioritizedResourceTest : public testing::Test {
CHECK(output_surface_->BindToClient(&output_surface_client_));
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ = ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1);
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false);
}

virtual ~PrioritizedResourceTest() {
Expand Down
3 changes: 2 additions & 1 deletion cc/resources/prioritized_tile_set_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ class PrioritizedTileSetTest : public testing::Test {
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ =
ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false)
.Pass();
resource_pool_ = ResourcePool::Create(
resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
Expand Down
4 changes: 2 additions & 2 deletions cc/resources/raster_worker_pool_perftest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@ class RasterWorkerPoolPerfTestBase {
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ =
ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
.Pass();
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false).Pass();
staging_resource_pool_ = ResourcePool::Create(
resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);
}
Expand Down
4 changes: 2 additions & 2 deletions cc/resources/raster_worker_pool_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ class RasterWorkerPoolTest
shared_bitmap_manager_.reset(new TestSharedBitmapManager());
resource_provider_ =
ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
.Pass();
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
false).Pass();
staging_resource_pool_ = ResourcePool::Create(
resource_provider_.get(), GL_TEXTURE_2D, RGBA_8888);

Expand Down
28 changes: 19 additions & 9 deletions cc/resources/resource_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -431,8 +431,11 @@ bool ResourceProvider::RasterBuffer::UnlockForWrite() {

ResourceProvider::DirectRasterBuffer::DirectRasterBuffer(
const Resource* resource,
ResourceProvider* resource_provider)
: RasterBuffer(resource, resource_provider), surface_generation_id_(0u) {}
ResourceProvider* resource_provider,
bool use_distance_field_text )
: RasterBuffer(resource, resource_provider),
surface_generation_id_(0u),
use_distance_field_text_(use_distance_field_text) {}

ResourceProvider::DirectRasterBuffer::~DirectRasterBuffer() {}

Expand Down Expand Up @@ -466,8 +469,11 @@ skia::RefPtr<SkSurface> ResourceProvider::DirectRasterBuffer::CreateSurface() {
desc.fTextureHandle = resource()->gl_id;
skia::RefPtr<GrTexture> gr_texture =
skia::AdoptRef(gr_context->wrapBackendTexture(desc));
surface = skia::AdoptRef(
SkSurface::NewRenderTargetDirect(gr_texture->asRenderTarget()));
SkSurface::TextRenderMode text_render_mode =
use_distance_field_text_ ? SkSurface::kDistanceField_TextRenderMode
: SkSurface::kStandard_TextRenderMode;
surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
gr_texture->asRenderTarget(), text_render_mode));
}
break;
}
Expand Down Expand Up @@ -592,13 +598,15 @@ scoped_ptr<ResourceProvider> ResourceProvider::Create(
SharedBitmapManager* shared_bitmap_manager,
int highp_threshold_min,
bool use_rgba_4444_texture_format,
size_t id_allocation_chunk_size) {
size_t id_allocation_chunk_size,
bool use_distance_field_text) {
scoped_ptr<ResourceProvider> resource_provider(
new ResourceProvider(output_surface,
shared_bitmap_manager,
highp_threshold_min,
use_rgba_4444_texture_format,
id_allocation_chunk_size));
id_allocation_chunk_size,
use_distance_field_text));

if (resource_provider->ContextGL())
resource_provider->InitializeGL();
Expand Down Expand Up @@ -1237,7 +1245,8 @@ ResourceProvider::ResourceProvider(OutputSurface* output_surface,
SharedBitmapManager* shared_bitmap_manager,
int highp_threshold_min,
bool use_rgba_4444_texture_format,
size_t id_allocation_chunk_size)
size_t id_allocation_chunk_size,
bool use_distance_field_text)
: output_surface_(output_surface),
shared_bitmap_manager_(shared_bitmap_manager),
lost_output_surface_(false),
Expand All @@ -1252,7 +1261,8 @@ ResourceProvider::ResourceProvider(OutputSurface* output_surface,
best_texture_format_(RGBA_8888),
use_rgba_4444_texture_format_(use_rgba_4444_texture_format),
id_allocation_chunk_size_(id_allocation_chunk_size),
use_sync_query_(false) {
use_sync_query_(false),
use_distance_field_text_(use_distance_field_text) {
DCHECK(output_surface_->HasClient());
DCHECK(id_allocation_chunk_size_);
}
Expand Down Expand Up @@ -1741,7 +1751,7 @@ SkCanvas* ResourceProvider::MapDirectRasterBuffer(ResourceId id) {
Resource* resource = GetResource(id);
if (!resource->direct_raster_buffer.get()) {
resource->direct_raster_buffer.reset(
new DirectRasterBuffer(resource, this));
new DirectRasterBuffer(resource, this, use_distance_field_text_));
}
return resource->direct_raster_buffer->LockForWrite();
}
Expand Down
12 changes: 9 additions & 3 deletions cc/resources/resource_provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ class CC_EXPORT ResourceProvider {
SharedBitmapManager* shared_bitmap_manager,
int highp_threshold_min,
bool use_rgba_4444_texture_format,
size_t id_allocation_chunk_size);
size_t id_allocation_chunk_size,
bool use_distance_field_text);
virtual ~ResourceProvider();

void InitializeSoftware();
Expand Down Expand Up @@ -476,7 +477,8 @@ class CC_EXPORT ResourceProvider {
class DirectRasterBuffer : public RasterBuffer {
public:
DirectRasterBuffer(const Resource* resource,
ResourceProvider* resource_provider);
ResourceProvider* resource_provider,
bool use_distance_field_text);
virtual ~DirectRasterBuffer();

protected:
Expand All @@ -487,6 +489,7 @@ class CC_EXPORT ResourceProvider {
private:
skia::RefPtr<SkSurface> surface_;
uint32_t surface_generation_id_;
const bool use_distance_field_text_;

DISALLOW_COPY_AND_ASSIGN(DirectRasterBuffer);
};
Expand Down Expand Up @@ -565,7 +568,8 @@ class CC_EXPORT ResourceProvider {
SharedBitmapManager* shared_bitmap_manager,
int highp_threshold_min,
bool use_rgba_4444_texture_format,
size_t id_allocation_chunk_size);
size_t id_allocation_chunk_size,
bool use_distance_field_text);

void CleanUpGLIfNeeded();

Expand Down Expand Up @@ -651,6 +655,8 @@ class CC_EXPORT ResourceProvider {

bool use_sync_query_;

bool use_distance_field_text_;

DISALLOW_COPY_AND_ASSIGN(ResourceProvider);
};

Expand Down
Loading

0 comments on commit b242b14

Please sign in to comment.