Index: content/renderer/render_thread_impl.cc |
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
index 0845883e185e198d5d91837bd9fae4da9262772c..46afc5a27a25fb0dd5fa5f8da55984429098bfc4 100644 |
--- a/content/renderer/render_thread_impl.cc |
+++ b/content/renderer/render_thread_impl.cc |
@@ -412,17 +412,33 @@ void CreateEmbeddedWorkerSetup( |
new EmbeddedWorkerSetupImpl(std::move(request)); |
} |
-void StringToUintVector(const std::string& str, std::vector<unsigned>* vector) { |
- DCHECK(vector->empty()); |
- std::vector<std::string> pieces = base::SplitString( |
- str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
- DCHECK_EQ(pieces.size(), static_cast<size_t>(gfx::BufferFormat::LAST) + 1); |
- for (size_t i = 0; i < pieces.size(); ++i) { |
- unsigned number = 0; |
- bool succeed = base::StringToUint(pieces[i], &number); |
- DCHECK(succeed); |
- vector->push_back(number); |
+// Converts a serialized ImageTextureTargetsMap back to the runtime format. |
+// Serialization takes the form: |
+// "usage,format,target;usage,format,target;...;usage,format,target" |
+cc::RendererSettings::ImageTextureTargetsMap StringToImageTextureTargetsMap( |
+ const std::string& str) { |
+ cc::RendererSettings::ImageTextureTargetsMap map; |
+ std::vector<std::string> entries = |
+ base::SplitString(str, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
+ for (const auto& entry : entries) { |
+ std::vector<std::string> fields = base::SplitString( |
+ entry, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
+ DCHECK_EQ(fields.size(), 3); |
enne (OOO)
2016/07/15 21:39:32
Mmm, is this safe if the dcheck fails? Should it b
ericrk
2016/07/19 20:22:43
Changed these to CHECKs and added a unit test. We
|
+ uint32_t usage = 0; |
+ uint32_t format = 0; |
+ uint32_t target = 0; |
+ bool succeeded = base::StringToUint(fields[0], &usage) && |
+ base::StringToUint(fields[1], &format) && |
+ base::StringToUint(fields[2], &target); |
+ DCHECK(succeeded); |
+ DCHECK_LE(usage, static_cast<uint32_t>(gfx::BufferUsage::LAST)); |
+ DCHECK_LE(format, static_cast<uint32_t>(gfx::BufferFormat::LAST)); |
+ map.emplace(cc::RendererSettings::ImageTextureTargetKey( |
+ static_cast<gfx::BufferUsage>(usage), |
+ static_cast<gfx::BufferFormat>(format)), |
+ target); |
} |
+ return map; |
} |
scoped_refptr<ContextProviderCommandBuffer> CreateOffscreenContext( |
@@ -757,7 +773,8 @@ void RenderThreadImpl::Init( |
std::string image_texture_target_string = |
command_line.GetSwitchValueASCII(switches::kContentImageTextureTarget); |
- StringToUintVector(image_texture_target_string, &use_image_texture_targets_); |
+ use_image_texture_targets_ = |
+ StringToImageTextureTargetsMap(image_texture_target_string); |
if (command_line.HasSwitch(switches::kDisableLCDText)) { |
is_lcd_text_enabled_ = false; |
@@ -1455,16 +1472,11 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl::GetGpuFactories() { |
#else |
cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames); |
#endif |
- std::vector<unsigned> image_texture_targets; |
- std::string video_frame_image_texture_target_string = |
- cmd_line->GetSwitchValueASCII(switches::kVideoImageTextureTarget); |
- StringToUintVector(video_frame_image_texture_target_string, |
- &image_texture_targets); |
gpu_factories_.push_back(RendererGpuVideoAcceleratorFactories::Create( |
std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(), |
media_task_runner, std::move(media_context_provider), |
- enable_gpu_memory_buffer_video_frames, image_texture_targets, |
+ enable_gpu_memory_buffer_video_frames, use_image_texture_targets_, |
enable_video_accelerator)); |
return gpu_factories_.back(); |
} |
@@ -1595,7 +1607,8 @@ bool RenderThreadImpl::IsElasticOverscrollEnabled() { |
return is_elastic_overscroll_enabled_; |
} |
-std::vector<unsigned> RenderThreadImpl::GetImageTextureTargets() { |
+const cc::RendererSettings::ImageTextureTargetsMap& |
+RenderThreadImpl::GetImageTextureTargets() { |
return use_image_texture_targets_; |
} |