Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 2711153006: Add RendererFactorySelector (Closed)
Patch Set: Removed flat_map. Temp fix of -Wsometimes-initialized Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | media/base/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 #include "gin/modules/console.h" 153 #include "gin/modules/console.h"
154 #include "gin/modules/module_registry.h" 154 #include "gin/modules/module_registry.h"
155 #include "gin/modules/timer.h" 155 #include "gin/modules/timer.h"
156 #include "media/audio/audio_output_device.h" 156 #include "media/audio/audio_output_device.h"
157 #include "media/base/audio_renderer_mixer_input.h" 157 #include "media/base/audio_renderer_mixer_input.h"
158 #include "media/base/cdm_factory.h" 158 #include "media/base/cdm_factory.h"
159 #include "media/base/decoder_factory.h" 159 #include "media/base/decoder_factory.h"
160 #include "media/base/media.h" 160 #include "media/base/media.h"
161 #include "media/base/media_log.h" 161 #include "media/base/media_log.h"
162 #include "media/base/media_switches.h" 162 #include "media/base/media_switches.h"
163 #include "media/base/renderer_factory_selector.h"
163 #include "media/blink/url_index.h" 164 #include "media/blink/url_index.h"
164 #include "media/blink/webencryptedmediaclient_impl.h" 165 #include "media/blink/webencryptedmediaclient_impl.h"
165 #include "media/blink/webmediaplayer_impl.h" 166 #include "media/blink/webmediaplayer_impl.h"
166 #include "media/media_features.h" 167 #include "media/media_features.h"
167 #include "media/renderers/gpu_video_accelerator_factories.h" 168 #include "media/renderers/gpu_video_accelerator_factories.h"
168 #include "mojo/edk/js/core.h" 169 #include "mojo/edk/js/core.h"
169 #include "mojo/edk/js/support.h" 170 #include "mojo/edk/js/support.h"
170 #include "net/base/data_url.h" 171 #include "net/base/data_url.h"
171 #include "net/base/load_flags.h" 172 #include "net/base/load_flags.h"
172 #include "net/base/net_errors.h" 173 #include "net/base/net_errors.h"
(...skipping 2718 matching lines...) Expand 10 before | Expand all | Expand 10 after
2891 // a new player id which is used to collate logs on the browser side. 2892 // a new player id which is used to collate logs on the browser side.
2892 std::unique_ptr<media::MediaLog> media_log( 2893 std::unique_ptr<media::MediaLog> media_log(
2893 new RenderMediaLog(url::Origin(security_origin).GetURL())); 2894 new RenderMediaLog(url::Origin(security_origin).GetURL()));
2894 2895
2895 bool use_fallback_path = false; 2896 bool use_fallback_path = false;
2896 #if defined(OS_ANDROID) 2897 #if defined(OS_ANDROID)
2897 use_fallback_path = UseMediaPlayerRenderer(url); 2898 use_fallback_path = UseMediaPlayerRenderer(url);
2898 #endif // defined(OS_ANDROID) 2899 #endif // defined(OS_ANDROID)
2899 2900
2900 std::unique_ptr<media::RendererFactory> media_renderer_factory; 2901 std::unique_ptr<media::RendererFactory> media_renderer_factory;
2902 media::RendererFactorySelector::FactoryType factory_type;
2901 if (use_fallback_path) { 2903 if (use_fallback_path) {
2902 #if defined(OS_ANDROID) 2904 #if defined(OS_ANDROID)
2903 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( 2905 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>(
2904 media::MojoRendererFactory::GetGpuFactoriesCB(), 2906 media::MojoRendererFactory::GetGpuFactoriesCB(),
2905 GetRemoteInterfaces()->get()); 2907 GetRemoteInterfaces()->get());
2906 2908
2907 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( 2909 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>(
2908 render_thread->compositor_task_runner(), 2910 render_thread->compositor_task_runner(),
2909 std::move(mojo_renderer_factory), 2911 std::move(mojo_renderer_factory),
2910 base::Bind(&StreamTextureWrapperImpl::Create, 2912 base::Bind(&StreamTextureWrapperImpl::Create,
2911 render_thread->EnableStreamTextureCopy(), 2913 render_thread->EnableStreamTextureCopy(),
2912 render_thread->GetStreamTexureFactory(), 2914 render_thread->GetStreamTexureFactory(),
2913 base::ThreadTaskRunnerHandle::Get())); 2915 base::ThreadTaskRunnerHandle::Get()));
2914 #endif // defined(OS_ANDROID) 2916 #endif // defined(OS_ANDROID)
2917
2918 // TODO(tguilbert): Move this line back into an #if defined(OS_ANDROID).
2919 // This will never be reached, unless we are on Android. Moving this line
2920 // outside of the #if/#endif block fixes a "sometimes-uninitialized" error
2921 // on desktop. This will be fixed with the next CL for crbug.com/663503.
2922 factory_type = media::RendererFactorySelector::FactoryType::MEDIA_PLAYER;
2915 } else { 2923 } else {
2916 #if defined(ENABLE_MOJO_RENDERER) 2924 #if defined(ENABLE_MOJO_RENDERER)
2917 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) 2925 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
2918 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 2926 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
2919 switches::kDisableMojoRenderer)) { 2927 switches::kDisableMojoRenderer)) {
2920 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( 2928 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
2921 media_log.get(), GetDecoderFactory(), 2929 media_log.get(), GetDecoderFactory(),
2922 base::Bind(&RenderThreadImpl::GetGpuFactories, 2930 base::Bind(&RenderThreadImpl::GetGpuFactories,
2923 base::Unretained(render_thread))); 2931 base::Unretained(render_thread)));
2932
2933 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT;
2924 } 2934 }
2925 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) 2935 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
2926 if (!media_renderer_factory) { 2936 if (!media_renderer_factory) {
2927 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( 2937 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>(
2928 base::Bind(&RenderThreadImpl::GetGpuFactories, 2938 base::Bind(&RenderThreadImpl::GetGpuFactories,
2929 base::Unretained(render_thread)), 2939 base::Unretained(render_thread)),
2930 GetMediaInterfaceProvider()); 2940 GetMediaInterfaceProvider());
2941
2942 factory_type = media::RendererFactorySelector::FactoryType::MOJO;
2931 } 2943 }
2932 #else 2944 #else
2933 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( 2945 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
2934 media_log.get(), GetDecoderFactory(), 2946 media_log.get(), GetDecoderFactory(),
2935 base::Bind(&RenderThreadImpl::GetGpuFactories, 2947 base::Bind(&RenderThreadImpl::GetGpuFactories,
2936 base::Unretained(render_thread))); 2948 base::Unretained(render_thread)));
2949
2950 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT;
2937 #endif // defined(ENABLE_MOJO_RENDERER) 2951 #endif // defined(ENABLE_MOJO_RENDERER)
2938 } 2952 }
2939 2953
2940 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2954 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2941 media_renderer_factory = 2955 media_renderer_factory =
2942 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( 2956 base::MakeUnique<media::remoting::AdaptiveRendererFactory>(
2943 std::move(media_renderer_factory), std::move(remoting_controller)); 2957 std::move(media_renderer_factory), std::move(remoting_controller));
2958
2959 factory_type = media::RendererFactorySelector::FactoryType::ADAPTIVE;
2944 #endif 2960 #endif
2945 2961
2946 if (!url_index_.get() || url_index_->frame() != frame_) 2962 if (!url_index_.get() || url_index_->frame() != frame_)
2947 url_index_.reset(new media::UrlIndex(frame_)); 2963 url_index_.reset(new media::UrlIndex(frame_));
2948 2964
2965 auto factory_selector = base::MakeUnique<media::RendererFactorySelector>();
2966
2967 factory_selector->AddFactory(factory_type, std::move(media_renderer_factory));
2968 factory_selector->SetBaseFactoryType(factory_type);
2969
2949 std::unique_ptr<media::WebMediaPlayerParams> params( 2970 std::unique_ptr<media::WebMediaPlayerParams> params(
2950 new media::WebMediaPlayerParams( 2971 new media::WebMediaPlayerParams(
2951 std::move(media_log), 2972 std::move(media_log),
2952 base::Bind(&ContentRendererClient::DeferMediaLoad, 2973 base::Bind(&ContentRendererClient::DeferMediaLoad,
2953 base::Unretained(GetContentClient()->renderer()), 2974 base::Unretained(GetContentClient()->renderer()),
2954 static_cast<RenderFrame*>(this), 2975 static_cast<RenderFrame*>(this),
2955 GetWebMediaPlayerDelegate()->has_played_media()), 2976 GetWebMediaPlayerDelegate()->has_played_media()),
2956 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), 2977 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(),
2957 render_thread->GetWorkerTaskRunner(), 2978 render_thread->GetWorkerTaskRunner(),
2958 render_thread->compositor_task_runner(), context_3d_cb, 2979 render_thread->compositor_task_runner(), context_3d_cb,
2959 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, 2980 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
2960 base::Unretained(blink::MainThreadIsolate())), 2981 base::Unretained(blink::MainThreadIsolate())),
2961 initial_cdm, media_surface_manager_, media_observer, 2982 initial_cdm, media_surface_manager_, media_observer,
2962 max_keyframe_distance_to_disable_background_video, 2983 max_keyframe_distance_to_disable_background_video,
2963 max_keyframe_distance_to_disable_background_video_mse, 2984 max_keyframe_distance_to_disable_background_video_mse,
2964 GetWebkitPreferences().enable_instant_source_buffer_gc, 2985 GetWebkitPreferences().enable_instant_source_buffer_gc,
2965 GetContentClient()->renderer()->AllowMediaSuspend(), 2986 GetContentClient()->renderer()->AllowMediaSuspend(),
2966 embedded_media_experience_enabled)); 2987 embedded_media_experience_enabled));
2967 2988
2968 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( 2989 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl(
2969 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), 2990 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(),
2970 std::move(media_renderer_factory), url_index_, std::move(params)); 2991 std::move(factory_selector), url_index_, std::move(params));
2971 2992
2972 #if defined(OS_ANDROID) // WMPI_CAST 2993 #if defined(OS_ANDROID) // WMPI_CAST
2973 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); 2994 media_player->SetMediaPlayerManager(GetMediaPlayerManager());
2974 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); 2995 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor());
2975 media_player->SetUseFallbackPath(use_fallback_path); 2996 media_player->SetUseFallbackPath(use_fallback_path);
2976 #endif // defined(OS_ANDROID) 2997 #endif // defined(OS_ANDROID)
2977 2998
2978 return media_player; 2999 return media_player;
2979 } 3000 }
2980 3001
(...skipping 4024 matching lines...) Expand 10 before | Expand all | Expand 10 after
7005 policy(info.default_policy), 7026 policy(info.default_policy),
7006 replaces_current_history_item(info.replaces_current_history_item), 7027 replaces_current_history_item(info.replaces_current_history_item),
7007 history_navigation_in_new_child_frame( 7028 history_navigation_in_new_child_frame(
7008 info.is_history_navigation_in_new_child_frame), 7029 info.is_history_navigation_in_new_child_frame),
7009 client_redirect(info.is_client_redirect), 7030 client_redirect(info.is_client_redirect),
7010 cache_disabled(info.is_cache_disabled), 7031 cache_disabled(info.is_cache_disabled),
7011 form(info.form), 7032 form(info.form),
7012 source_location(info.source_location) {} 7033 source_location(info.source_location) {}
7013 7034
7014 } // namespace content 7035 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | media/base/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698