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 23 matching lines...) Expand all Loading... |
34 #include "base/threading/thread_local.h" | 34 #include "base/threading/thread_local.h" |
35 #include "base/threading/thread_restrictions.h" | 35 #include "base/threading/thread_restrictions.h" |
36 #include "base/threading/thread_task_runner_handle.h" | 36 #include "base/threading/thread_task_runner_handle.h" |
37 #include "base/trace_event/trace_event.h" | 37 #include "base/trace_event/trace_event.h" |
38 #include "base/values.h" | 38 #include "base/values.h" |
39 #include "build/build_config.h" | 39 #include "build/build_config.h" |
40 #include "cc/base/histograms.h" | 40 #include "cc/base/histograms.h" |
41 #include "cc/base/switches.h" | 41 #include "cc/base/switches.h" |
42 #include "cc/blink/web_external_bitmap_impl.h" | 42 #include "cc/blink/web_external_bitmap_impl.h" |
43 #include "cc/blink/web_layer_impl.h" | 43 #include "cc/blink/web_layer_impl.h" |
| 44 #include "cc/output/buffer_to_texture_target_map.h" |
44 #include "cc/output/output_surface.h" | 45 #include "cc/output/output_surface.h" |
45 #include "cc/output/vulkan_in_process_context_provider.h" | 46 #include "cc/output/vulkan_in_process_context_provider.h" |
46 #include "cc/raster/task_graph_runner.h" | 47 #include "cc/raster/task_graph_runner.h" |
47 #include "cc/trees/layer_tree_host_common.h" | 48 #include "cc/trees/layer_tree_host_common.h" |
48 #include "cc/trees/layer_tree_settings.h" | 49 #include "cc/trees/layer_tree_settings.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" |
53 #include "content/child/appcache/appcache_dispatcher.h" | 54 #include "content/child/appcache/appcache_dispatcher.h" |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 | 406 |
406 private: | 407 private: |
407 mojo::StrongBinding<mojom::EmbeddedWorkerSetup> binding_; | 408 mojo::StrongBinding<mojom::EmbeddedWorkerSetup> binding_; |
408 }; | 409 }; |
409 | 410 |
410 void CreateEmbeddedWorkerSetup( | 411 void CreateEmbeddedWorkerSetup( |
411 mojo::InterfaceRequest<mojom::EmbeddedWorkerSetup> request) { | 412 mojo::InterfaceRequest<mojom::EmbeddedWorkerSetup> request) { |
412 new EmbeddedWorkerSetupImpl(std::move(request)); | 413 new EmbeddedWorkerSetupImpl(std::move(request)); |
413 } | 414 } |
414 | 415 |
415 void StringToUintVector(const std::string& str, std::vector<unsigned>* vector) { | |
416 DCHECK(vector->empty()); | |
417 std::vector<std::string> pieces = base::SplitString( | |
418 str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | |
419 DCHECK_EQ(pieces.size(), static_cast<size_t>(gfx::BufferFormat::LAST) + 1); | |
420 for (size_t i = 0; i < pieces.size(); ++i) { | |
421 unsigned number = 0; | |
422 bool succeed = base::StringToUint(pieces[i], &number); | |
423 DCHECK(succeed); | |
424 vector->push_back(number); | |
425 } | |
426 } | |
427 | |
428 scoped_refptr<ContextProviderCommandBuffer> CreateOffscreenContext( | 416 scoped_refptr<ContextProviderCommandBuffer> CreateOffscreenContext( |
429 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, | 417 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, |
430 const gpu::SharedMemoryLimits& limits, | 418 const gpu::SharedMemoryLimits& limits, |
431 bool support_locking, | 419 bool support_locking, |
432 command_buffer_metrics::ContextType type, | 420 command_buffer_metrics::ContextType type, |
433 int32_t stream_id, | 421 int32_t stream_id, |
434 gpu::GpuStreamPriority stream_priority) { | 422 gpu::GpuStreamPriority stream_priority) { |
435 DCHECK(gpu_channel_host); | 423 DCHECK(gpu_channel_host); |
436 // This is used to create a few different offscreen contexts: | 424 // This is used to create a few different offscreen contexts: |
437 // - The shared main thread context (offscreen) used by blink for canvas. | 425 // - The shared main thread context (offscreen) used by blink for canvas. |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 Boolean key_exists = false; | 738 Boolean key_exists = false; |
751 Boolean value = CFPreferencesGetAppBooleanValue( | 739 Boolean value = CFPreferencesGetAppBooleanValue( |
752 key, kCFPreferencesCurrentApplication, &key_exists); | 740 key, kCFPreferencesCurrentApplication, &key_exists); |
753 is_elastic_overscroll_enabled_ = !key_exists || value; | 741 is_elastic_overscroll_enabled_ = !key_exists || value; |
754 #else | 742 #else |
755 is_elastic_overscroll_enabled_ = false; | 743 is_elastic_overscroll_enabled_ = false; |
756 #endif | 744 #endif |
757 | 745 |
758 std::string image_texture_target_string = | 746 std::string image_texture_target_string = |
759 command_line.GetSwitchValueASCII(switches::kContentImageTextureTarget); | 747 command_line.GetSwitchValueASCII(switches::kContentImageTextureTarget); |
760 StringToUintVector(image_texture_target_string, &use_image_texture_targets_); | 748 buffer_to_texture_target_map_ = |
| 749 cc::StringToBufferToTextureTargetMap(image_texture_target_string); |
761 | 750 |
762 if (command_line.HasSwitch(switches::kDisableLCDText)) { | 751 if (command_line.HasSwitch(switches::kDisableLCDText)) { |
763 is_lcd_text_enabled_ = false; | 752 is_lcd_text_enabled_ = false; |
764 } else if (command_line.HasSwitch(switches::kEnableLCDText)) { | 753 } else if (command_line.HasSwitch(switches::kEnableLCDText)) { |
765 is_lcd_text_enabled_ = true; | 754 is_lcd_text_enabled_ = true; |
766 } else { | 755 } else { |
767 #if defined(OS_ANDROID) | 756 #if defined(OS_ANDROID) |
768 is_lcd_text_enabled_ = false; | 757 is_lcd_text_enabled_ = false; |
769 #else | 758 #else |
770 is_lcd_text_enabled_ = true; | 759 is_lcd_text_enabled_ = true; |
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1448 const bool enable_video_accelerator = | 1437 const bool enable_video_accelerator = |
1449 !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); | 1438 !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); |
1450 const bool enable_gpu_memory_buffer_video_frames = | 1439 const bool enable_gpu_memory_buffer_video_frames = |
1451 #if defined(OS_MACOSX) || defined(OS_LINUX) | 1440 #if defined(OS_MACOSX) || defined(OS_LINUX) |
1452 !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames) && | 1441 !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames) && |
1453 !cmd_line->HasSwitch(switches::kDisableGpuCompositing) && | 1442 !cmd_line->HasSwitch(switches::kDisableGpuCompositing) && |
1454 !gpu_channel_host->gpu_info().software_rendering; | 1443 !gpu_channel_host->gpu_info().software_rendering; |
1455 #else | 1444 #else |
1456 cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames); | 1445 cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames); |
1457 #endif | 1446 #endif |
1458 std::vector<unsigned> image_texture_targets; | |
1459 std::string video_frame_image_texture_target_string = | |
1460 cmd_line->GetSwitchValueASCII(switches::kVideoImageTextureTarget); | |
1461 StringToUintVector(video_frame_image_texture_target_string, | |
1462 &image_texture_targets); | |
1463 | 1447 |
1464 gpu_factories_.push_back(RendererGpuVideoAcceleratorFactories::Create( | 1448 gpu_factories_.push_back(RendererGpuVideoAcceleratorFactories::Create( |
1465 std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(), | 1449 std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(), |
1466 media_task_runner, std::move(media_context_provider), | 1450 media_task_runner, std::move(media_context_provider), |
1467 enable_gpu_memory_buffer_video_frames, image_texture_targets, | 1451 enable_gpu_memory_buffer_video_frames, buffer_to_texture_target_map_, |
1468 enable_video_accelerator)); | 1452 enable_video_accelerator)); |
1469 return gpu_factories_.back(); | 1453 return gpu_factories_.back(); |
1470 } | 1454 } |
1471 | 1455 |
1472 scoped_refptr<ContextProviderCommandBuffer> | 1456 scoped_refptr<ContextProviderCommandBuffer> |
1473 RenderThreadImpl::SharedMainThreadContextProvider() { | 1457 RenderThreadImpl::SharedMainThreadContextProvider() { |
1474 DCHECK(IsMainThread()); | 1458 DCHECK(IsMainThread()); |
1475 if (shared_main_thread_contexts_ && | 1459 if (shared_main_thread_contexts_ && |
1476 shared_main_thread_contexts_->ContextGL()->GetGraphicsResetStatusKHR() == | 1460 shared_main_thread_contexts_->ContextGL()->GetGraphicsResetStatusKHR() == |
1477 GL_NO_ERROR) | 1461 GL_NO_ERROR) |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1588 } | 1572 } |
1589 | 1573 |
1590 bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() { | 1574 bool RenderThreadImpl::IsGpuMemoryBufferCompositorResourcesEnabled() { |
1591 return is_gpu_memory_buffer_compositor_resources_enabled_; | 1575 return is_gpu_memory_buffer_compositor_resources_enabled_; |
1592 } | 1576 } |
1593 | 1577 |
1594 bool RenderThreadImpl::IsElasticOverscrollEnabled() { | 1578 bool RenderThreadImpl::IsElasticOverscrollEnabled() { |
1595 return is_elastic_overscroll_enabled_; | 1579 return is_elastic_overscroll_enabled_; |
1596 } | 1580 } |
1597 | 1581 |
1598 std::vector<unsigned> RenderThreadImpl::GetImageTextureTargets() { | 1582 const cc::BufferToTextureTargetMap& |
1599 return use_image_texture_targets_; | 1583 RenderThreadImpl::GetBufferToTextureTargetMap() { |
| 1584 return buffer_to_texture_target_map_; |
1600 } | 1585 } |
1601 | 1586 |
1602 scoped_refptr<base::SingleThreadTaskRunner> | 1587 scoped_refptr<base::SingleThreadTaskRunner> |
1603 RenderThreadImpl::GetCompositorMainThreadTaskRunner() { | 1588 RenderThreadImpl::GetCompositorMainThreadTaskRunner() { |
1604 return main_thread_compositor_task_runner_; | 1589 return main_thread_compositor_task_runner_; |
1605 } | 1590 } |
1606 | 1591 |
1607 scoped_refptr<base::SingleThreadTaskRunner> | 1592 scoped_refptr<base::SingleThreadTaskRunner> |
1608 RenderThreadImpl::GetCompositorImplThreadTaskRunner() { | 1593 RenderThreadImpl::GetCompositorImplThreadTaskRunner() { |
1609 return compositor_task_runner_; | 1594 return compositor_task_runner_; |
(...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2222 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) | 2207 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) |
2223 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; | 2208 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; |
2224 | 2209 |
2225 blink::mainThreadIsolate()->MemoryPressureNotification( | 2210 blink::mainThreadIsolate()->MemoryPressureNotification( |
2226 v8_memory_pressure_level); | 2211 v8_memory_pressure_level); |
2227 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2212 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
2228 v8_memory_pressure_level); | 2213 v8_memory_pressure_level); |
2229 } | 2214 } |
2230 | 2215 |
2231 } // namespace content | 2216 } // namespace content |
OLD | NEW |