OLD | NEW |
---|---|
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/debug/trace_event.h" | 13 #include "base/debug/trace_event.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/strings/string_split.h" | 15 #include "base/strings/string_split.h" |
16 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
17 #include "base/strings/stringprintf.h" | |
17 #include "build/build_config.h" | 18 #include "build/build_config.h" |
18 #include "cc/base/math_util.h" | 19 #include "cc/base/math_util.h" |
19 #include "cc/layers/video_layer_impl.h" | 20 #include "cc/layers/video_layer_impl.h" |
20 #include "cc/output/compositor_frame.h" | 21 #include "cc/output/compositor_frame.h" |
21 #include "cc/output/compositor_frame_metadata.h" | 22 #include "cc/output/compositor_frame_metadata.h" |
22 #include "cc/output/context_provider.h" | 23 #include "cc/output/context_provider.h" |
23 #include "cc/output/copy_output_request.h" | 24 #include "cc/output/copy_output_request.h" |
24 #include "cc/output/copy_output_result.h" | 25 #include "cc/output/copy_output_result.h" |
25 #include "cc/output/geometry_binding.h" | 26 #include "cc/output/geometry_binding.h" |
26 #include "cc/output/gl_frame_data.h" | 27 #include "cc/output/gl_frame_data.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
131 shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)), | 132 shared_geometry_quad_(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)), |
132 context_(output_surface->context3d()), | 133 context_(output_surface->context3d()), |
133 is_backbuffer_discarded_(false), | 134 is_backbuffer_discarded_(false), |
134 discard_backbuffer_when_not_visible_(false), | 135 discard_backbuffer_when_not_visible_(false), |
135 is_using_bind_uniform_(false), | 136 is_using_bind_uniform_(false), |
136 visible_(true), | 137 visible_(true), |
137 is_scissor_enabled_(false), | 138 is_scissor_enabled_(false), |
138 highp_threshold_min_(highp_threshold_min), | 139 highp_threshold_min_(highp_threshold_min), |
139 highp_threshold_cache_(0), | 140 highp_threshold_cache_(0), |
140 on_demand_tile_raster_resource_id_(0), | 141 on_demand_tile_raster_resource_id_(0), |
141 weak_factory_(this) { | 142 weak_factory_(this), |
143 offscreen_context_labelled_(false) { | |
142 DCHECK(context_); | 144 DCHECK(context_); |
143 } | 145 } |
144 | 146 |
145 bool GLRenderer::Initialize() { | 147 bool GLRenderer::Initialize() { |
146 if (!context_->makeContextCurrent()) | 148 if (!context_->makeContextCurrent()) |
147 return false; | 149 return false; |
148 | 150 |
149 context_->pushGroupMarkerEXT(Settings().compositor_name.c_str()); | 151 std::string unique_context_name = base::StringPrintf( |
152 "%s-%p", | |
153 Settings().compositor_name.c_str(), | |
154 context_); | |
155 context_->pushGroupMarkerEXT(unique_context_name.c_str()); | |
150 | 156 |
151 std::string extensions_string = | 157 std::string extensions_string = |
152 UTF16ToASCII(context_->getString(GL_EXTENSIONS)); | 158 UTF16ToASCII(context_->getString(GL_EXTENSIONS)); |
153 std::vector<std::string> extensions_list; | 159 std::vector<std::string> extensions_list; |
154 base::SplitString(extensions_string, ' ', &extensions_list); | 160 base::SplitString(extensions_string, ' ', &extensions_list); |
155 std::set<std::string> extensions(extensions_list.begin(), | 161 std::set<std::string> extensions(extensions_list.begin(), |
156 extensions_list.end()); | 162 extensions_list.end()); |
157 | 163 |
158 capabilities_.using_partial_swap = | 164 capabilities_.using_partial_swap = |
159 Settings().partial_swap_enabled && | 165 Settings().partial_swap_enabled && |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
455 source_texture_resource->id()); | 461 source_texture_resource->id()); |
456 | 462 |
457 // Flush the compositor context to ensure that textures there are available | 463 // Flush the compositor context to ensure that textures there are available |
458 // in the shared context. Do this after locking/creating the compositor | 464 // in the shared context. Do this after locking/creating the compositor |
459 // texture. | 465 // texture. |
460 renderer->resource_provider()->Flush(); | 466 renderer->resource_provider()->Flush(); |
461 | 467 |
462 // Make sure skia uses the correct GL context. | 468 // Make sure skia uses the correct GL context. |
463 offscreen_contexts->Context3d()->makeContextCurrent(); | 469 offscreen_contexts->Context3d()->makeContextCurrent(); |
464 | 470 |
471 // Lazily label this context. | |
472 renderer->LazyLabelOffscreenContext(); | |
473 | |
465 SkBitmap source = | 474 SkBitmap source = |
466 RenderSurfaceFilters::Apply(filters, | 475 RenderSurfaceFilters::Apply(filters, |
467 lock.texture_id(), | 476 lock.texture_id(), |
468 source_texture_resource->size(), | 477 source_texture_resource->size(), |
469 offscreen_contexts->GrContext()); | 478 offscreen_contexts->GrContext()); |
470 | 479 |
471 // Flush skia context so that all the rendered stuff appears on the | 480 // Flush skia context so that all the rendered stuff appears on the |
472 // texture. | 481 // texture. |
473 offscreen_contexts->GrContext()->flush(); | 482 offscreen_contexts->GrContext()->flush(); |
474 | 483 |
(...skipping 21 matching lines...) Expand all Loading... | |
496 source_texture_resource->id()); | 505 source_texture_resource->id()); |
497 | 506 |
498 // Flush the compositor context to ensure that textures there are available | 507 // Flush the compositor context to ensure that textures there are available |
499 // in the shared context. Do this after locking/creating the compositor | 508 // in the shared context. Do this after locking/creating the compositor |
500 // texture. | 509 // texture. |
501 renderer->resource_provider()->Flush(); | 510 renderer->resource_provider()->Flush(); |
502 | 511 |
503 // Make sure skia uses the correct GL context. | 512 // Make sure skia uses the correct GL context. |
504 offscreen_contexts->Context3d()->makeContextCurrent(); | 513 offscreen_contexts->Context3d()->makeContextCurrent(); |
505 | 514 |
515 // Lazily label this context. | |
516 renderer->LazyLabelOffscreenContext(); | |
517 | |
506 // Wrap the source texture in a Ganesh platform texture. | 518 // Wrap the source texture in a Ganesh platform texture. |
507 GrBackendTextureDesc backend_texture_description; | 519 GrBackendTextureDesc backend_texture_description; |
508 backend_texture_description.fWidth = source_texture_resource->size().width(); | 520 backend_texture_description.fWidth = source_texture_resource->size().width(); |
509 backend_texture_description.fHeight = | 521 backend_texture_description.fHeight = |
510 source_texture_resource->size().height(); | 522 source_texture_resource->size().height(); |
511 backend_texture_description.fConfig = kSkia8888_GrPixelConfig; | 523 backend_texture_description.fConfig = kSkia8888_GrPixelConfig; |
512 backend_texture_description.fTextureHandle = lock.texture_id(); | 524 backend_texture_description.fTextureHandle = lock.texture_id(); |
513 backend_texture_description.fOrigin = kBottomLeft_GrSurfaceOrigin; | 525 backend_texture_description.fOrigin = kBottomLeft_GrSurfaceOrigin; |
514 skia::RefPtr<GrTexture> texture = | 526 skia::RefPtr<GrTexture> texture = |
515 skia::AdoptRef(offscreen_contexts->GrContext()->wrapBackendTexture( | 527 skia::AdoptRef(offscreen_contexts->GrContext()->wrapBackendTexture( |
(...skipping 2512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3028 bool GLRenderer::CanUseSkiaGPUBackend() const { | 3040 bool GLRenderer::CanUseSkiaGPUBackend() const { |
3029 // The Skia GPU backend requires a stencil buffer. See ReinitializeGrCanvas | 3041 // The Skia GPU backend requires a stencil buffer. See ReinitializeGrCanvas |
3030 // implementation. | 3042 // implementation. |
3031 return gr_context_ && context_->getContextAttributes().stencil; | 3043 return gr_context_ && context_->getContextAttributes().stencil; |
3032 } | 3044 } |
3033 | 3045 |
3034 bool GLRenderer::IsContextLost() { | 3046 bool GLRenderer::IsContextLost() { |
3035 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR); | 3047 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR); |
3036 } | 3048 } |
3037 | 3049 |
3050 void GLRenderer::LazyLabelOffscreenContext() { | |
3051 if (!offscreen_context_labelled_) { | |
danakj
2013/06/25 15:02:19
nit: if (labelled) return;
| |
3052 offscreen_context_labelled_ = true; | |
3053 std::string unique_context_name = base::StringPrintf( | |
3054 "%s-Offscreen-%p", | |
3055 Settings().compositor_name.c_str(), | |
3056 context_); | |
3057 resource_provider()->offscreen_context_provider()->Context3d()-> | |
3058 pushGroupMarkerEXT(unique_context_name.c_str()); | |
3059 } | |
3060 } | |
3061 | |
3062 | |
3038 } // namespace cc | 3063 } // namespace cc |
OLD | NEW |