OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/render_thread_impl.h" | 5 #include "content/renderer/render_thread_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 22 matching lines...) Expand all Loading... |
33 #include "base/threading/thread_local.h" | 33 #include "base/threading/thread_local.h" |
34 #include "base/threading/thread_restrictions.h" | 34 #include "base/threading/thread_restrictions.h" |
35 #include "base/threading/thread_task_runner_handle.h" | 35 #include "base/threading/thread_task_runner_handle.h" |
36 #include "base/trace_event/trace_event.h" | 36 #include "base/trace_event/trace_event.h" |
37 #include "base/values.h" | 37 #include "base/values.h" |
38 #include "build/build_config.h" | 38 #include "build/build_config.h" |
39 #include "cc/base/histograms.h" | 39 #include "cc/base/histograms.h" |
40 #include "cc/base/switches.h" | 40 #include "cc/base/switches.h" |
41 #include "cc/blink/web_external_bitmap_impl.h" | 41 #include "cc/blink/web_external_bitmap_impl.h" |
42 #include "cc/blink/web_layer_impl.h" | 42 #include "cc/blink/web_layer_impl.h" |
| 43 #include "cc/output/buffer_to_texture_target_map.h" |
43 #include "cc/output/output_surface.h" | 44 #include "cc/output/output_surface.h" |
44 #include "cc/output/vulkan_in_process_context_provider.h" | 45 #include "cc/output/vulkan_in_process_context_provider.h" |
45 #include "cc/raster/task_graph_runner.h" | 46 #include "cc/raster/task_graph_runner.h" |
46 #include "cc/trees/layer_tree_host_common.h" | 47 #include "cc/trees/layer_tree_host_common.h" |
47 #include "cc/trees/layer_tree_settings.h" | 48 #include "cc/trees/layer_tree_settings.h" |
48 #include "components/memory_coordinator/child/child_memory_coordinator_impl.h" | 49 #include "components/memory_coordinator/child/child_memory_coordinator_impl.h" |
49 #include "components/scheduler/child/compositor_worker_scheduler.h" | 50 #include "components/scheduler/child/compositor_worker_scheduler.h" |
50 #include "components/scheduler/child/webthread_base.h" | 51 #include "components/scheduler/child/webthread_base.h" |
51 #include "components/scheduler/child/webthread_impl_for_worker_scheduler.h" | 52 #include "components/scheduler/child/webthread_impl_for_worker_scheduler.h" |
52 #include "components/scheduler/renderer/renderer_scheduler.h" | 53 #include "components/scheduler/renderer/renderer_scheduler.h" |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 | 408 |
408 private: | 409 private: |
409 mojo::StrongBinding<mojom::EmbeddedWorkerSetup> binding_; | 410 mojo::StrongBinding<mojom::EmbeddedWorkerSetup> binding_; |
410 }; | 411 }; |
411 | 412 |
412 void CreateEmbeddedWorkerSetup( | 413 void CreateEmbeddedWorkerSetup( |
413 mojo::InterfaceRequest<mojom::EmbeddedWorkerSetup> request) { | 414 mojo::InterfaceRequest<mojom::EmbeddedWorkerSetup> request) { |
414 new EmbeddedWorkerSetupImpl(std::move(request)); | 415 new EmbeddedWorkerSetupImpl(std::move(request)); |
415 } | 416 } |
416 | 417 |
417 void StringToUintVector(const std::string& str, std::vector<unsigned>* vector) { | |
418 DCHECK(vector->empty()); | |
419 std::vector<std::string> pieces = base::SplitString( | |
420 str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | |
421 DCHECK_EQ(pieces.size(), static_cast<size_t>(gfx::BufferFormat::LAST) + 1); | |
422 for (size_t i = 0; i < pieces.size(); ++i) { | |
423 unsigned number = 0; | |
424 bool succeed = base::StringToUint(pieces[i], &number); | |
425 DCHECK(succeed); | |
426 vector->push_back(number); | |
427 } | |
428 } | |
429 | |
430 scoped_refptr<ContextProviderCommandBuffer> CreateOffscreenContext( | 418 scoped_refptr<ContextProviderCommandBuffer> CreateOffscreenContext( |
431 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, | 419 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, |
432 const gpu::SharedMemoryLimits& limits, | 420 const gpu::SharedMemoryLimits& limits, |
433 bool support_locking, | 421 bool support_locking, |
434 command_buffer_metrics::ContextType type, | 422 command_buffer_metrics::ContextType type, |
435 int32_t stream_id, | 423 int32_t stream_id, |
436 gpu::GpuStreamPriority stream_priority) { | 424 gpu::GpuStreamPriority stream_priority) { |
437 DCHECK(gpu_channel_host); | 425 DCHECK(gpu_channel_host); |
438 // This is used to create a few different offscreen contexts: | 426 // This is used to create a few different offscreen contexts: |
439 // - The shared main thread context (offscreen) used by blink for canvas. | 427 // - The shared main thread context (offscreen) used by blink for canvas. |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
774 Boolean key_exists = false; | 762 Boolean key_exists = false; |
775 Boolean value = CFPreferencesGetAppBooleanValue( | 763 Boolean value = CFPreferencesGetAppBooleanValue( |
776 key, kCFPreferencesCurrentApplication, &key_exists); | 764 key, kCFPreferencesCurrentApplication, &key_exists); |
777 is_elastic_overscroll_enabled_ = !key_exists || value; | 765 is_elastic_overscroll_enabled_ = !key_exists || value; |
778 #else | 766 #else |
779 is_elastic_overscroll_enabled_ = false; | 767 is_elastic_overscroll_enabled_ = false; |
780 #endif | 768 #endif |
781 | 769 |
782 std::string image_texture_target_string = | 770 std::string image_texture_target_string = |
783 command_line.GetSwitchValueASCII(switches::kContentImageTextureTarget); | 771 command_line.GetSwitchValueASCII(switches::kContentImageTextureTarget); |
784 StringToUintVector(image_texture_target_string, &use_image_texture_targets_); | 772 buffer_to_texture_target_map_ = |
| 773 cc::StringToBufferToTextureTargetMap(image_texture_target_string); |
785 | 774 |
786 if (command_line.HasSwitch(switches::kDisableLCDText)) { | 775 if (command_line.HasSwitch(switches::kDisableLCDText)) { |
787 is_lcd_text_enabled_ = false; | 776 is_lcd_text_enabled_ = false; |
788 } else if (command_line.HasSwitch(switches::kEnableLCDText)) { | 777 } else if (command_line.HasSwitch(switches::kEnableLCDText)) { |
789 is_lcd_text_enabled_ = true; | 778 is_lcd_text_enabled_ = true; |
790 } else { | 779 } else { |
791 #if defined(OS_ANDROID) | 780 #if defined(OS_ANDROID) |
792 is_lcd_text_enabled_ = false; | 781 is_lcd_text_enabled_ = false; |
793 #else | 782 #else |
794 is_lcd_text_enabled_ = true; | 783 is_lcd_text_enabled_ = true; |
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1475 const bool enable_video_accelerator = | 1464 const bool enable_video_accelerator = |
1476 !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); | 1465 !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); |
1477 const bool enable_gpu_memory_buffer_video_frames = | 1466 const bool enable_gpu_memory_buffer_video_frames = |
1478 #if defined(OS_MACOSX) || defined(OS_LINUX) | 1467 #if defined(OS_MACOSX) || defined(OS_LINUX) |
1479 !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames) && | 1468 !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames) && |
1480 !cmd_line->HasSwitch(switches::kDisableGpuCompositing) && | 1469 !cmd_line->HasSwitch(switches::kDisableGpuCompositing) && |
1481 !gpu_channel_host->gpu_info().software_rendering; | 1470 !gpu_channel_host->gpu_info().software_rendering; |
1482 #else | 1471 #else |
1483 cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames); | 1472 cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames); |
1484 #endif | 1473 #endif |
1485 std::vector<unsigned> image_texture_targets; | |
1486 std::string video_frame_image_texture_target_string = | |
1487 cmd_line->GetSwitchValueASCII(switches::kVideoImageTextureTarget); | |
1488 StringToUintVector(video_frame_image_texture_target_string, | |
1489 &image_texture_targets); | |
1490 | 1474 |
1491 gpu_factories_.push_back(RendererGpuVideoAcceleratorFactories::Create( | 1475 gpu_factories_.push_back(RendererGpuVideoAcceleratorFactories::Create( |
1492 std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(), | 1476 std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(), |
1493 media_task_runner, std::move(media_context_provider), | 1477 media_task_runner, std::move(media_context_provider), |
1494 enable_gpu_memory_buffer_video_frames, image_texture_targets, | 1478 enable_gpu_memory_buffer_video_frames, buffer_to_texture_target_map_, |
1495 enable_video_accelerator)); | 1479 enable_video_accelerator)); |
1496 return gpu_factories_.back(); | 1480 return gpu_factories_.back(); |
1497 } | 1481 } |
1498 | 1482 |
1499 scoped_refptr<ContextProviderCommandBuffer> | 1483 scoped_refptr<ContextProviderCommandBuffer> |
1500 RenderThreadImpl::SharedMainThreadContextProvider() { | 1484 RenderThreadImpl::SharedMainThreadContextProvider() { |
1501 DCHECK(IsMainThread()); | 1485 DCHECK(IsMainThread()); |
1502 if (shared_main_thread_contexts_ && | 1486 if (shared_main_thread_contexts_ && |
1503 shared_main_thread_contexts_->ContextGL()->GetGraphicsResetStatusKHR() == | 1487 shared_main_thread_contexts_->ContextGL()->GetGraphicsResetStatusKHR() == |
1504 GL_NO_ERROR) | 1488 GL_NO_ERROR) |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1601 } | 1585 } |
1602 | 1586 |
1603 bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() { | 1587 bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() { |
1604 return is_gpu_memory_buffer_compositor_resources_enabled_; | 1588 return is_gpu_memory_buffer_compositor_resources_enabled_; |
1605 } | 1589 } |
1606 | 1590 |
1607 bool RenderThreadImpl::IsElasticOverscrollEnabled() { | 1591 bool RenderThreadImpl::IsElasticOverscrollEnabled() { |
1608 return is_elastic_overscroll_enabled_; | 1592 return is_elastic_overscroll_enabled_; |
1609 } | 1593 } |
1610 | 1594 |
1611 std::vector<unsigned> RenderThreadImpl::GetImageTextureTargets() { | 1595 const cc::BufferToTextureTargetMap& |
1612 return use_image_texture_targets_; | 1596 RenderThreadImpl::GetBufferToTextureTargetMap() { |
| 1597 return buffer_to_texture_target_map_; |
1613 } | 1598 } |
1614 | 1599 |
1615 scoped_refptr<base::SingleThreadTaskRunner> | 1600 scoped_refptr<base::SingleThreadTaskRunner> |
1616 RenderThreadImpl::GetCompositorMainThreadTaskRunner() { | 1601 RenderThreadImpl::GetCompositorMainThreadTaskRunner() { |
1617 return main_thread_compositor_task_runner_; | 1602 return main_thread_compositor_task_runner_; |
1618 } | 1603 } |
1619 | 1604 |
1620 scoped_refptr<base::SingleThreadTaskRunner> | 1605 scoped_refptr<base::SingleThreadTaskRunner> |
1621 RenderThreadImpl::GetCompositorImplThreadTaskRunner() { | 1606 RenderThreadImpl::GetCompositorImplThreadTaskRunner() { |
1622 return compositor_task_runner_; | 1607 return compositor_task_runner_; |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2241 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) | 2226 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) |
2242 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; | 2227 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; |
2243 | 2228 |
2244 blink::mainThreadIsolate()->MemoryPressureNotification( | 2229 blink::mainThreadIsolate()->MemoryPressureNotification( |
2245 v8_memory_pressure_level); | 2230 v8_memory_pressure_level); |
2246 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2231 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
2247 v8_memory_pressure_level); | 2232 v8_memory_pressure_level); |
2248 } | 2233 } |
2249 | 2234 |
2250 } // namespace content | 2235 } // namespace content |
OLD | NEW |