std::move(receiver), frame->GetGlobalId());
}
-#if defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
-void BindSuspendResumeManager(
- mojo::PendingReceiver<suspend_resume::mojom::SuspendResumeManager>
- receiver) {
- suspend_resume::SuspendResumeServiceImpl::GetInstance()->AddReceiver(
- std::move(receiver));
-}
-#endif // defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
-
} // namespace
#if BUILDFLAG(IS_TIZEN_TV)
#endif
#if defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
- map->Add<suspend_resume::mojom::SuspendResumeManager>(
- base::BindRepeating(&BindSuspendResumeManager));
+ map->Add<suspend_resume::mojom::SuspendResumeManager>(base::BindRepeating(
+ &suspend_resume::SuspendResumeServiceImpl::BindSuspendResumeManager));
#endif // defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
map->Add<blink::mojom::AudioContextManager>(base::BindRepeating(
#include "tizen_src/ewk/efl_integration/common/content_switches_efl.h"
#endif
+#if defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
+#include "tizen_src/chromium_impl/services/suspend_resume/suspend_resume_service_impl.h"
+#endif
+
namespace content {
namespace {
instance_weak_factory_.GetWeakPtr()));
#endif
+#if defined(TIZEN_TV_UPSTREAM_MULTIMEDIA)
+ AddUIThreadInterface(
+ registry.get(),
+ base::BindRepeating(
+ &suspend_resume::SuspendResumeServiceImpl::BindSuspendResumeManager));
+#endif
+
// ---- Please do not register interfaces below this line ------
//
// This call should be done after registering all interfaces above, so that
// static
SuspendResumeServiceImpl* SuspendResumeServiceImpl::GetInstance() {
- return base::Singleton<SuspendResumeServiceImpl>::get();
+ static base::NoDestructor<SuspendResumeServiceImpl> instance;
+ return instance.get();
+}
+
+// static
+void SuspendResumeServiceImpl::BindSuspendResumeManager(
+ mojo::PendingReceiver<suspend_resume::mojom::SuspendResumeManager>
+ receiver) {
+ suspend_resume::SuspendResumeServiceImpl::GetInstance()->AddReceiver(
+ std::move(receiver));
}
void SuspendResumeServiceImpl::Notify(mojom::State new_state) {
#include "tizen_src/chromium_impl/services/suspend_resume/public/mojom/suspend_resume_service.mojom.h"
-#include "base/memory/singleton.h"
+#include "base/no_destructor.h"
#include "base/synchronization/lock.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
class SuspendResumeServiceImpl : public mojom::SuspendResumeManager {
public:
static SuspendResumeServiceImpl* GetInstance();
+ static void BindSuspendResumeManager(
+ mojo::PendingReceiver<suspend_resume::mojom::SuspendResumeManager>
+ receiver);
void Notify(mojom::State new_state);
absl::optional<mojom::State> RegisterClient(
mojo::ReceiverSet<mojom::SuspendResumeManager> receivers_;
mojo::RemoteSet<mojom::SuspendResumeObserver> observers_;
- friend base::DefaultSingletonTraits<SuspendResumeServiceImpl>;
+ friend base::NoDestructor<SuspendResumeServiceImpl>;
};
} // namespace suspend_resume
#include "third_party/blink/renderer/platform/peerconnection/switchable_video_decoder_wrapper.h"
#include "base/logging.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
-#include "third_party/blink/renderer/platform/peerconnection/rtc_tools.h"
+#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
+#include "third_party/blink/public/platform/platform.h"
#include "third_party/webrtc/modules/video_coding/include/video_error_codes.h"
#include "tizen_src/chromium_impl/services/suspend_resume/public/cpp/suspend_resume.h"
namespace {
-constexpr size_t kMaxConsequtiveHwErrors = 4;
+constexpr size_t kMaxConsecutiveHwErrors = 4;
enum class DecodingMode {
kNone,
webrtc::VideoDecoder::Settings decoder_settings_;
const std::string fallback_implementation_name_;
webrtc::DecodedImageCallback* callback_;
- size_t hw_consequtive_generic_errors_;
+ size_t hw_consecutive_generic_errors_;
suspend_resume::State last_state_;
" (fallback from: " +
hw_decoder_->GetDecoderInfo().implementation_name + ")"),
callback_(nullptr),
- hw_consequtive_generic_errors_(0) {
- mojo::PendingRemote<suspend_resume::mojom::SuspendResumeManager>
- pending_manager;
- GetInterface(pending_manager.InitWithNewPipeAndPassReceiver());
+ hw_consecutive_generic_errors_(0) {
+ mojo::Remote<suspend_resume::mojom::SuspendResumeManager> manager;
+ Platform::Current()->GetBrowserInterfaceBroker()->GetInterface(
+ manager.BindNewPipeAndPassReceiver());
absl::optional<suspend_resume::State> state;
- mojo::Remote<suspend_resume::mojom::SuspendResumeManager>(
- std::move(pending_manager))
- ->AddObserver(receiver_.BindNewPipeAndPassRemote(), &state);
+ bool ret = manager->AddObserver(receiver_.BindNewPipeAndPassRemote(), &state);
+ if (!ret) {
+ LOG(ERROR) << "Failed to register in suspend resume service! "
+ << "Only software decoding will be available.";
+ } else if (!state) {
+ LOG(WARNING) << "Unknown suspend_resume::State! Assuming SUSPENDED";
+ } else {
+ LOG(INFO) << "Initial state: " << *state;
+ }
+
last_state_ = state.value_or(suspend_resume::State::SUSPENDED);
}
ret = hw_decoder_->Decode(input_image, missing_frames, render_time_ms);
if (ret != WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE) {
if (ret != WEBRTC_VIDEO_CODEC_ERROR) {
- hw_consequtive_generic_errors_ = 0;
+ hw_consecutive_generic_errors_ = 0;
return ret;
}
if (input_image._frameType == webrtc::VideoFrameType::kVideoFrameKey) {
// Only count errors on key-frames, since generic errors can happen
// with hw decoder due to many arbitrary reasons.
// However, requesting a key-frame is supposed to fix the issue.
- ++hw_consequtive_generic_errors_;
+ ++hw_consecutive_generic_errors_;
}
- if (hw_consequtive_generic_errors_ < kMaxConsequtiveHwErrors) {
+ if (hw_consecutive_generic_errors_ < kMaxConsecutiveHwErrors) {
return ret;
}
}
#include <list>
#include <vector>
-#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/suspend_resume/public/cpp/suspend_resume.h"
-#include "third_party/blink/renderer/platform/peerconnection/rtc_tools.h"
-#include "third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.h"
+#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
+#include "third_party/blink/public/platform/platform.h"
#include "third_party/webrtc/api/video/video_codec_constants.h"
#include "third_party/webrtc/modules/video_coding/include/video_codec_interface.h"
#include "third_party/webrtc/modules/video_coding/include/video_error_codes.h"
sw_encoder_factory_(sw_encoder_factory),
format_(format),
settings_(webrtc::VideoEncoder::Capabilities{false}, 1, 0) {
- mojo::PendingRemote<suspend_resume::mojom::SuspendResumeManager>
- pending_manager;
- GetInterface(pending_manager.InitWithNewPipeAndPassReceiver());
+ mojo::Remote<suspend_resume::mojom::SuspendResumeManager> manager;
+ Platform::Current()->GetBrowserInterfaceBroker()->GetInterface(
+ manager.BindNewPipeAndPassReceiver());
absl::optional<suspend_resume::State> state;
- mojo::Remote<suspend_resume::mojom::SuspendResumeManager>(
- std::move(pending_manager))
- ->AddObserver(receiver_.BindNewPipeAndPassRemote(), &state);
+ bool ret = manager->AddObserver(receiver_.BindNewPipeAndPassRemote(), &state);
+ if (!ret) {
+ LOG(ERROR) << "Failed to register in suspend resume service! "
+ << "Only software encoding will be available.";
+ } else if (!state) {
+ LOG(WARNING) << "Unknown suspend_resume::State! Assuming SUSPENDED";
+ } else {
+ LOG(INFO) << "Initial state: " << *state;
+ }
+
// When the actual state is not yet known (shortly after process start),
// it's treated as suspended. This prevents from stealing resources from
// other app. After receiving any notification it'll be changed, possibly