mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-02 20:26:59 +01:00
Add a new CefBrowserHost::SetWindowlessFrameRate method to support
dynamic configuration of the windowless frame rate (issue #1629).
This commit is contained in:
parent
42341b40fa
commit
483a841348
@ -505,6 +505,26 @@ typedef struct _cef_browser_host_t {
|
|||||||
void (CEF_CALLBACK *notify_move_or_resize_started)(
|
void (CEF_CALLBACK *notify_move_or_resize_started)(
|
||||||
struct _cef_browser_host_t* self);
|
struct _cef_browser_host_t* self);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns the maximum rate in frames per second (fps) that
|
||||||
|
// cef_render_handler_t:: OnPaint will be called for a windowless browser. The
|
||||||
|
// actual fps may be lower if the browser cannot generate frames at the
|
||||||
|
// requested rate. The minimum value is 1 and the maximum value is 60 (default
|
||||||
|
// 30). This function can only be called on the UI thread.
|
||||||
|
///
|
||||||
|
int (CEF_CALLBACK *get_windowless_frame_rate)(
|
||||||
|
struct _cef_browser_host_t* self);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Set the maximum rate in frames per second (fps) that cef_render_handler_t::
|
||||||
|
// OnPaint will be called for a windowless browser. The actual fps may be
|
||||||
|
// lower if the browser cannot generate frames at the requested rate. The
|
||||||
|
// minimum value is 1 and the maximum value is 60 (default 30). Can also be
|
||||||
|
// set at browser creation via cef_browser_tSettings.windowless_frame_rate.
|
||||||
|
///
|
||||||
|
void (CEF_CALLBACK *set_windowless_frame_rate)(
|
||||||
|
struct _cef_browser_host_t* self, int frame_rate);
|
||||||
|
|
||||||
///
|
///
|
||||||
// Get the NSTextInputContext implementation for enabling IME on Mac when
|
// Get the NSTextInputContext implementation for enabling IME on Mac when
|
||||||
// window rendering is disabled.
|
// window rendering is disabled.
|
||||||
|
@ -555,6 +555,26 @@ class CefBrowserHost : public virtual CefBase {
|
|||||||
/*--cef()--*/
|
/*--cef()--*/
|
||||||
virtual void NotifyMoveOrResizeStarted() =0;
|
virtual void NotifyMoveOrResizeStarted() =0;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Returns the maximum rate in frames per second (fps) that CefRenderHandler::
|
||||||
|
// OnPaint will be called for a windowless browser. The actual fps may be
|
||||||
|
// lower if the browser cannot generate frames at the requested rate. The
|
||||||
|
// minimum value is 1 and the maximum value is 60 (default 30). This method
|
||||||
|
// can only be called on the UI thread.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual int GetWindowlessFrameRate() =0;
|
||||||
|
|
||||||
|
///
|
||||||
|
// Set the maximum rate in frames per second (fps) that CefRenderHandler::
|
||||||
|
// OnPaint will be called for a windowless browser. The actual fps may be
|
||||||
|
// lower if the browser cannot generate frames at the requested rate. The
|
||||||
|
// minimum value is 1 and the maximum value is 60 (default 30). Can also be
|
||||||
|
// set at browser creation via CefBrowserSettings.windowless_frame_rate.
|
||||||
|
///
|
||||||
|
/*--cef()--*/
|
||||||
|
virtual void SetWindowlessFrameRate(int frame_rate) =0;
|
||||||
|
|
||||||
///
|
///
|
||||||
// Get the NSTextInputContext implementation for enabling IME on Mac when
|
// Get the NSTextInputContext implementation for enabling IME on Mac when
|
||||||
// window rendering is disabled.
|
// window rendering is disabled.
|
||||||
|
@ -477,7 +477,8 @@ typedef struct _cef_browser_settings_t {
|
|||||||
// The maximum rate in frames per second (fps) that CefRenderHandler::OnPaint
|
// The maximum rate in frames per second (fps) that CefRenderHandler::OnPaint
|
||||||
// will be called for a windowless browser. The actual fps may be lower if
|
// will be called for a windowless browser. The actual fps may be lower if
|
||||||
// the browser cannot generate frames at the requested rate. The minimum
|
// the browser cannot generate frames at the requested rate. The minimum
|
||||||
// value is 1 and the maximum value is 60 (default 30).
|
// value is 1 and the maximum value is 60 (default 30). This value can also be
|
||||||
|
// changed dynamically via CefBrowserHost::SetWindowlessFrameRate.
|
||||||
///
|
///
|
||||||
int windowless_frame_rate;
|
int windowless_frame_rate;
|
||||||
|
|
||||||
|
@ -1267,6 +1267,40 @@ void CefBrowserHostImpl::NotifyMoveOrResizeStarted() {
|
|||||||
PlatformNotifyMoveOrResizeStarted();
|
PlatformNotifyMoveOrResizeStarted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CefBrowserHostImpl::GetWindowlessFrameRate() {
|
||||||
|
// Verify that this method is being called on the UI thread.
|
||||||
|
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||||
|
NOTREACHED() << "called on invalid thread";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CefRenderWidgetHostViewOSR::ClampFrameRate(
|
||||||
|
settings_.windowless_frame_rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefBrowserHostImpl::SetWindowlessFrameRate(int frame_rate) {
|
||||||
|
if (!CEF_CURRENTLY_ON_UIT()) {
|
||||||
|
CEF_POST_TASK(CEF_UIT,
|
||||||
|
base::Bind(&CefBrowserHostImpl::SetWindowlessFrameRate, this,
|
||||||
|
frame_rate));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsWindowless())
|
||||||
|
return;
|
||||||
|
|
||||||
|
settings_.windowless_frame_rate = frame_rate;
|
||||||
|
|
||||||
|
if (!web_contents())
|
||||||
|
return;
|
||||||
|
|
||||||
|
CefRenderWidgetHostViewOSR* view =
|
||||||
|
static_cast<CefRenderWidgetHostViewOSR*>(
|
||||||
|
web_contents()->GetRenderViewHost()->GetView());
|
||||||
|
if (view)
|
||||||
|
view->UpdateFrameRate();
|
||||||
|
}
|
||||||
|
|
||||||
// CefBrowser methods.
|
// CefBrowser methods.
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -192,6 +192,8 @@ class CefBrowserHostImpl : public CefBrowserHost,
|
|||||||
void SendFocusEvent(bool setFocus) override;
|
void SendFocusEvent(bool setFocus) override;
|
||||||
void SendCaptureLostEvent() override;
|
void SendCaptureLostEvent() override;
|
||||||
void NotifyMoveOrResizeStarted() override;
|
void NotifyMoveOrResizeStarted() override;
|
||||||
|
int GetWindowlessFrameRate() override;
|
||||||
|
void SetWindowlessFrameRate(int frame_rate) override;
|
||||||
CefTextInputContext GetNSTextInputContext() override;
|
CefTextInputContext GetNSTextInputContext() override;
|
||||||
void HandleKeyEventBeforeTextInputClient(CefEventHandle keyEvent) override;
|
void HandleKeyEventBeforeTextInputClient(CefEventHandle keyEvent) override;
|
||||||
void HandleKeyEventAfterTextInputClient(CefEventHandle keyEvent) override;
|
void HandleKeyEventAfterTextInputClient(CefEventHandle keyEvent) override;
|
||||||
|
@ -172,6 +172,10 @@ class CefCopyFrameGenerator {
|
|||||||
|
|
||||||
bool frame_pending() const { return frame_pending_; }
|
bool frame_pending() const { return frame_pending_; }
|
||||||
|
|
||||||
|
void set_frame_rate_threshold_ms(int frame_rate_threshold_ms) {
|
||||||
|
frame_rate_threshold_ms_ = frame_rate_threshold_ms;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InternalGenerateCopyFrame() {
|
void InternalGenerateCopyFrame() {
|
||||||
frame_pending_ = false;
|
frame_pending_ = false;
|
||||||
@ -375,7 +379,7 @@ class CefCopyFrameGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const int frame_rate_threshold_ms_;
|
int frame_rate_threshold_ms_;
|
||||||
CefRenderWidgetHostViewOSR* view_;
|
CefRenderWidgetHostViewOSR* view_;
|
||||||
|
|
||||||
base::TimeTicks frame_start_time_;
|
base::TimeTicks frame_start_time_;
|
||||||
@ -411,6 +415,12 @@ class CefBeginFrameTimer : public cc::TimeSourceClient {
|
|||||||
return time_source_->Active();
|
return time_source_->Active();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetFrameRateThresholdMs(int frame_rate_threshold_ms) {
|
||||||
|
time_source_->SetTimebaseAndInterval(
|
||||||
|
time_source_->Now(),
|
||||||
|
base::TimeDelta::FromMilliseconds(frame_rate_threshold_ms));
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// cc::TimerSourceClient implementation.
|
// cc::TimerSourceClient implementation.
|
||||||
void OnTimerTick() override {
|
void OnTimerTick() override {
|
||||||
@ -1182,6 +1192,11 @@ void CefRenderWidgetHostViewOSR::SendFocusEvent(bool focus) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CefRenderWidgetHostViewOSR::UpdateFrameRate() {
|
||||||
|
frame_rate_threshold_ms_ = 0;
|
||||||
|
SetFrameRate();
|
||||||
|
}
|
||||||
|
|
||||||
void CefRenderWidgetHostViewOSR::HoldResize() {
|
void CefRenderWidgetHostViewOSR::HoldResize() {
|
||||||
if (!hold_resize_)
|
if (!hold_resize_)
|
||||||
hold_resize_ = true;
|
hold_resize_ = true;
|
||||||
@ -1233,6 +1248,15 @@ void CefRenderWidgetHostViewOSR::OnPaint(
|
|||||||
ReleaseResize();
|
ReleaseResize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
int CefRenderWidgetHostViewOSR::ClampFrameRate(int frame_rate) {
|
||||||
|
if (frame_rate < 1)
|
||||||
|
return kDefaultFrameRate;
|
||||||
|
else if (frame_rate > kMaximumFrameRate)
|
||||||
|
return kMaximumFrameRate;
|
||||||
|
return frame_rate;
|
||||||
|
}
|
||||||
|
|
||||||
void CefRenderWidgetHostViewOSR::SetFrameRate() {
|
void CefRenderWidgetHostViewOSR::SetFrameRate() {
|
||||||
DCHECK(browser_impl_.get());
|
DCHECK(browser_impl_.get());
|
||||||
if (!browser_impl_.get())
|
if (!browser_impl_.get())
|
||||||
@ -1242,24 +1266,29 @@ void CefRenderWidgetHostViewOSR::SetFrameRate() {
|
|||||||
if (frame_rate_threshold_ms_ != 0)
|
if (frame_rate_threshold_ms_ != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int frame_rate = browser_impl_->settings().windowless_frame_rate;
|
const int frame_rate =
|
||||||
if (frame_rate < 1)
|
ClampFrameRate(browser_impl_->settings().windowless_frame_rate);
|
||||||
frame_rate = kDefaultFrameRate;
|
|
||||||
else if (frame_rate > kMaximumFrameRate)
|
|
||||||
frame_rate = kMaximumFrameRate;
|
|
||||||
frame_rate_threshold_ms_ = 1000 / frame_rate;
|
frame_rate_threshold_ms_ = 1000 / frame_rate;
|
||||||
|
|
||||||
// Configure the VSync interval for the browser process.
|
// Configure the VSync interval for the browser process.
|
||||||
compositor_->vsync_manager()->SetAuthoritativeVSyncInterval(
|
compositor_->vsync_manager()->SetAuthoritativeVSyncInterval(
|
||||||
base::TimeDelta::FromMilliseconds(frame_rate_threshold_ms_));
|
base::TimeDelta::FromMilliseconds(frame_rate_threshold_ms_));
|
||||||
|
|
||||||
|
if (copy_frame_generator_.get()) {
|
||||||
|
copy_frame_generator_->set_frame_rate_threshold_ms(
|
||||||
|
frame_rate_threshold_ms_);
|
||||||
|
}
|
||||||
|
|
||||||
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
||||||
if (command_line->HasSwitch(switches::kEnableBeginFrameScheduling)) {
|
if (command_line->HasSwitch(switches::kEnableBeginFrameScheduling)) {
|
||||||
DCHECK(!begin_frame_timer_.get());
|
if (begin_frame_timer_.get()) {
|
||||||
begin_frame_timer_.reset(new CefBeginFrameTimer(
|
begin_frame_timer_->SetFrameRateThresholdMs(frame_rate_threshold_ms_);
|
||||||
frame_rate_threshold_ms_,
|
} else {
|
||||||
base::Bind(&CefRenderWidgetHostViewOSR::OnBeginFrameTimerTick,
|
begin_frame_timer_.reset(new CefBeginFrameTimer(
|
||||||
weak_ptr_factory_.GetWeakPtr())));
|
frame_rate_threshold_ms_,
|
||||||
|
base::Bind(&CefRenderWidgetHostViewOSR::OnBeginFrameTimerTick,
|
||||||
|
weak_ptr_factory_.GetWeakPtr())));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,6 +234,7 @@ class CefRenderWidgetHostViewOSR
|
|||||||
void SendMouseEvent(const blink::WebMouseEvent& event);
|
void SendMouseEvent(const blink::WebMouseEvent& event);
|
||||||
void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event);
|
void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event);
|
||||||
void SendFocusEvent(bool focus);
|
void SendFocusEvent(bool focus);
|
||||||
|
void UpdateFrameRate();
|
||||||
|
|
||||||
void HoldResize();
|
void HoldResize();
|
||||||
void ReleaseResize();
|
void ReleaseResize();
|
||||||
@ -269,6 +270,8 @@ class CefRenderWidgetHostViewOSR
|
|||||||
content::RenderWidgetHostImpl* render_widget_host() const
|
content::RenderWidgetHostImpl* render_widget_host() const
|
||||||
{ return render_widget_host_; }
|
{ return render_widget_host_; }
|
||||||
|
|
||||||
|
static int ClampFrameRate(int frame_rate);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetFrameRate();
|
void SetFrameRate();
|
||||||
void SetDeviceScaleFactor();
|
void SetDeviceScaleFactor();
|
||||||
|
@ -676,6 +676,34 @@ void CEF_CALLBACK browser_host_notify_move_or_resize_started(
|
|||||||
CefBrowserHostCppToC::Get(self)->NotifyMoveOrResizeStarted();
|
CefBrowserHostCppToC::Get(self)->NotifyMoveOrResizeStarted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CEF_CALLBACK browser_host_get_windowless_frame_rate(
|
||||||
|
struct _cef_browser_host_t* self) {
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
int _retval = CefBrowserHostCppToC::Get(self)->GetWindowlessFrameRate();
|
||||||
|
|
||||||
|
// Return type: simple
|
||||||
|
return _retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEF_CALLBACK browser_host_set_windowless_frame_rate(
|
||||||
|
struct _cef_browser_host_t* self, int frame_rate) {
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
CefBrowserHostCppToC::Get(self)->SetWindowlessFrameRate(
|
||||||
|
frame_rate);
|
||||||
|
}
|
||||||
|
|
||||||
cef_text_input_context_t CEF_CALLBACK browser_host_get_nstext_input_context(
|
cef_text_input_context_t CEF_CALLBACK browser_host_get_nstext_input_context(
|
||||||
struct _cef_browser_host_t* self) {
|
struct _cef_browser_host_t* self) {
|
||||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
@ -879,6 +907,10 @@ CefBrowserHostCppToC::CefBrowserHostCppToC() {
|
|||||||
GetStruct()->send_capture_lost_event = browser_host_send_capture_lost_event;
|
GetStruct()->send_capture_lost_event = browser_host_send_capture_lost_event;
|
||||||
GetStruct()->notify_move_or_resize_started =
|
GetStruct()->notify_move_or_resize_started =
|
||||||
browser_host_notify_move_or_resize_started;
|
browser_host_notify_move_or_resize_started;
|
||||||
|
GetStruct()->get_windowless_frame_rate =
|
||||||
|
browser_host_get_windowless_frame_rate;
|
||||||
|
GetStruct()->set_windowless_frame_rate =
|
||||||
|
browser_host_set_windowless_frame_rate;
|
||||||
GetStruct()->get_nstext_input_context = browser_host_get_nstext_input_context;
|
GetStruct()->get_nstext_input_context = browser_host_get_nstext_input_context;
|
||||||
GetStruct()->handle_key_event_before_text_input_client =
|
GetStruct()->handle_key_event_before_text_input_client =
|
||||||
browser_host_handle_key_event_before_text_input_client;
|
browser_host_handle_key_event_before_text_input_client;
|
||||||
|
@ -563,6 +563,32 @@ void CefBrowserHostCToCpp::NotifyMoveOrResizeStarted() {
|
|||||||
_struct->notify_move_or_resize_started(_struct);
|
_struct->notify_move_or_resize_started(_struct);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CefBrowserHostCToCpp::GetWindowlessFrameRate() {
|
||||||
|
cef_browser_host_t* _struct = GetStruct();
|
||||||
|
if (CEF_MEMBER_MISSING(_struct, get_windowless_frame_rate))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
int _retval = _struct->get_windowless_frame_rate(_struct);
|
||||||
|
|
||||||
|
// Return type: simple
|
||||||
|
return _retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefBrowserHostCToCpp::SetWindowlessFrameRate(int frame_rate) {
|
||||||
|
cef_browser_host_t* _struct = GetStruct();
|
||||||
|
if (CEF_MEMBER_MISSING(_struct, set_windowless_frame_rate))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
_struct->set_windowless_frame_rate(_struct,
|
||||||
|
frame_rate);
|
||||||
|
}
|
||||||
|
|
||||||
CefTextInputContext CefBrowserHostCToCpp::GetNSTextInputContext() {
|
CefTextInputContext CefBrowserHostCToCpp::GetNSTextInputContext() {
|
||||||
cef_browser_host_t* _struct = GetStruct();
|
cef_browser_host_t* _struct = GetStruct();
|
||||||
if (CEF_MEMBER_MISSING(_struct, get_nstext_input_context))
|
if (CEF_MEMBER_MISSING(_struct, get_nstext_input_context))
|
||||||
|
@ -77,6 +77,8 @@ class CefBrowserHostCToCpp
|
|||||||
void SendFocusEvent(bool setFocus) OVERRIDE;
|
void SendFocusEvent(bool setFocus) OVERRIDE;
|
||||||
void SendCaptureLostEvent() OVERRIDE;
|
void SendCaptureLostEvent() OVERRIDE;
|
||||||
void NotifyMoveOrResizeStarted() OVERRIDE;
|
void NotifyMoveOrResizeStarted() OVERRIDE;
|
||||||
|
int GetWindowlessFrameRate() OVERRIDE;
|
||||||
|
void SetWindowlessFrameRate(int frame_rate) OVERRIDE;
|
||||||
CefTextInputContext GetNSTextInputContext() OVERRIDE;
|
CefTextInputContext GetNSTextInputContext() OVERRIDE;
|
||||||
void HandleKeyEventBeforeTextInputClient(CefEventHandle keyEvent) OVERRIDE;
|
void HandleKeyEventBeforeTextInputClient(CefEventHandle keyEvent) OVERRIDE;
|
||||||
void HandleKeyEventAfterTextInputClient(CefEventHandle keyEvent) OVERRIDE;
|
void HandleKeyEventAfterTextInputClient(CefEventHandle keyEvent) OVERRIDE;
|
||||||
|
@ -38,7 +38,10 @@
|
|||||||
#define ID_TESTS_ZOOM_IN 32710
|
#define ID_TESTS_ZOOM_IN 32710
|
||||||
#define ID_TESTS_ZOOM_OUT 32711
|
#define ID_TESTS_ZOOM_OUT 32711
|
||||||
#define ID_TESTS_ZOOM_RESET 32712
|
#define ID_TESTS_ZOOM_RESET 32712
|
||||||
#define ID_TESTS_LAST 32712
|
#define ID_TESTS_FPS_INCREASE 32713
|
||||||
|
#define ID_TESTS_FPS_DECREASE 32714
|
||||||
|
#define ID_TESTS_FPS_RESET 32715
|
||||||
|
#define ID_TESTS_LAST 32715
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
#define IDS_BINDING 1000
|
#define IDS_BINDING 1000
|
||||||
#define IDS_DIALOGS 1001
|
#define IDS_DIALOGS 1001
|
||||||
|
@ -588,6 +588,11 @@ GtkWidget* RootWindowGtk::CreateMenuBar() {
|
|||||||
AddMenuEntry(test_menu, "Zoom In", ID_TESTS_ZOOM_IN);
|
AddMenuEntry(test_menu, "Zoom In", ID_TESTS_ZOOM_IN);
|
||||||
AddMenuEntry(test_menu, "Zoom Out", ID_TESTS_ZOOM_OUT);
|
AddMenuEntry(test_menu, "Zoom Out", ID_TESTS_ZOOM_OUT);
|
||||||
AddMenuEntry(test_menu, "Zoom Reset", ID_TESTS_ZOOM_RESET);
|
AddMenuEntry(test_menu, "Zoom Reset", ID_TESTS_ZOOM_RESET);
|
||||||
|
if (with_osr_) {
|
||||||
|
AddMenuEntry(test_menu, "FPS Increase", ID_TESTS_FPS_INCREASE);
|
||||||
|
AddMenuEntry(test_menu, "FPS Decrease", ID_TESTS_FPS_DECREASE);
|
||||||
|
AddMenuEntry(test_menu, "FPS Reset", ID_TESTS_FPS_RESET);
|
||||||
|
}
|
||||||
AddMenuEntry(test_menu, "Begin Tracing", ID_TESTS_TRACING_BEGIN);
|
AddMenuEntry(test_menu, "Begin Tracing", ID_TESTS_TRACING_BEGIN);
|
||||||
AddMenuEntry(test_menu, "End Tracing", ID_TESTS_TRACING_END);
|
AddMenuEntry(test_menu, "End Tracing", ID_TESTS_TRACING_END);
|
||||||
AddMenuEntry(test_menu, "Print", ID_TESTS_PRINT);
|
AddMenuEntry(test_menu, "Print", ID_TESTS_PRINT);
|
||||||
|
@ -46,6 +46,7 @@ INT_PTR CALLBACK AboutWndProc(HWND hDlg, UINT message,
|
|||||||
RootWindowWin::RootWindowWin()
|
RootWindowWin::RootWindowWin()
|
||||||
: delegate_(NULL),
|
: delegate_(NULL),
|
||||||
with_controls_(false),
|
with_controls_(false),
|
||||||
|
with_osr_(false),
|
||||||
is_popup_(false),
|
is_popup_(false),
|
||||||
start_rect_(),
|
start_rect_(),
|
||||||
initialized_(false),
|
initialized_(false),
|
||||||
@ -86,13 +87,14 @@ void RootWindowWin::Init(RootWindow::Delegate* delegate,
|
|||||||
|
|
||||||
delegate_ = delegate;
|
delegate_ = delegate;
|
||||||
with_controls_ = with_controls;
|
with_controls_ = with_controls;
|
||||||
|
with_osr_ = with_osr;
|
||||||
|
|
||||||
start_rect_.left = bounds.x;
|
start_rect_.left = bounds.x;
|
||||||
start_rect_.top = bounds.y;
|
start_rect_.top = bounds.y;
|
||||||
start_rect_.right = bounds.x + bounds.width;
|
start_rect_.right = bounds.x + bounds.width;
|
||||||
start_rect_.bottom = bounds.y + bounds.height;
|
start_rect_.bottom = bounds.y + bounds.height;
|
||||||
|
|
||||||
CreateBrowserWindow(with_osr, url);
|
CreateBrowserWindow(url);
|
||||||
|
|
||||||
initialized_ = true;
|
initialized_ = true;
|
||||||
|
|
||||||
@ -117,6 +119,7 @@ void RootWindowWin::InitAsPopup(RootWindow::Delegate* delegate,
|
|||||||
|
|
||||||
delegate_ = delegate;
|
delegate_ = delegate;
|
||||||
with_controls_ = with_controls;
|
with_controls_ = with_controls;
|
||||||
|
with_osr_ = with_osr;
|
||||||
is_popup_ = true;
|
is_popup_ = true;
|
||||||
|
|
||||||
if (popupFeatures.xSet)
|
if (popupFeatures.xSet)
|
||||||
@ -128,7 +131,7 @@ void RootWindowWin::InitAsPopup(RootWindow::Delegate* delegate,
|
|||||||
if (popupFeatures.heightSet)
|
if (popupFeatures.heightSet)
|
||||||
start_rect_.bottom = start_rect_.top + popupFeatures.height;
|
start_rect_.bottom = start_rect_.top + popupFeatures.height;
|
||||||
|
|
||||||
CreateBrowserWindow(with_osr, std::string());
|
CreateBrowserWindow(std::string());
|
||||||
|
|
||||||
initialized_ = true;
|
initialized_ = true;
|
||||||
|
|
||||||
@ -199,9 +202,8 @@ ClientWindowHandle RootWindowWin::GetWindowHandle() const {
|
|||||||
return hwnd_;
|
return hwnd_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RootWindowWin::CreateBrowserWindow(bool with_osr,
|
void RootWindowWin::CreateBrowserWindow(const std::string& startup_url) {
|
||||||
const std::string& startup_url) {
|
if (with_osr_) {
|
||||||
if (with_osr) {
|
|
||||||
OsrRenderer::Settings settings;
|
OsrRenderer::Settings settings;
|
||||||
MainContext::Get()->PopulateOsrSettings(&settings);
|
MainContext::Get()->PopulateOsrSettings(&settings);
|
||||||
browser_window_.reset(new BrowserWindowOsrWin(this, startup_url, settings));
|
browser_window_.reset(new BrowserWindowOsrWin(this, startup_url, settings));
|
||||||
@ -316,6 +318,19 @@ void RootWindowWin::CreateRootWindow(const CefBrowserSettings& settings) {
|
|||||||
SetUserDataPtr(edit_hwnd_, this);
|
SetUserDataPtr(edit_hwnd_, this);
|
||||||
|
|
||||||
rect.top += URLBAR_HEIGHT;
|
rect.top += URLBAR_HEIGHT;
|
||||||
|
|
||||||
|
if (!with_osr_) {
|
||||||
|
// Remove the menu items that are only used with OSR.
|
||||||
|
HMENU hMenu = ::GetMenu(hwnd_);
|
||||||
|
if (hMenu) {
|
||||||
|
HMENU hTestMenu = ::GetSubMenu(hMenu, 2);
|
||||||
|
if (hTestMenu) {
|
||||||
|
::RemoveMenu(hTestMenu, ID_TESTS_FPS_INCREASE, MF_BYCOMMAND);
|
||||||
|
::RemoveMenu(hTestMenu, ID_TESTS_FPS_DECREASE, MF_BYCOMMAND);
|
||||||
|
::RemoveMenu(hTestMenu, ID_TESTS_FPS_RESET, MF_BYCOMMAND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// No controls so also remove the default menu.
|
// No controls so also remove the default menu.
|
||||||
::SetMenu(hwnd_, NULL);
|
::SetMenu(hwnd_, NULL);
|
||||||
|
@ -49,7 +49,7 @@ class RootWindowWin : public RootWindow,
|
|||||||
ClientWindowHandle GetWindowHandle() const OVERRIDE;
|
ClientWindowHandle GetWindowHandle() const OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CreateBrowserWindow(bool with_osr, const std::string& startup_url);
|
void CreateBrowserWindow(const std::string& startup_url);
|
||||||
void CreateRootWindow(const CefBrowserSettings& settings);
|
void CreateRootWindow(const CefBrowserSettings& settings);
|
||||||
|
|
||||||
// Register the root window class.
|
// Register the root window class.
|
||||||
@ -97,6 +97,7 @@ class RootWindowWin : public RootWindow,
|
|||||||
// Members set during initialization.
|
// Members set during initialization.
|
||||||
RootWindow::Delegate* delegate_;
|
RootWindow::Delegate* delegate_;
|
||||||
bool with_controls_;
|
bool with_controls_;
|
||||||
|
bool with_osr_;
|
||||||
bool is_popup_;
|
bool is_popup_;
|
||||||
RECT start_rect_;
|
RECT start_rect_;
|
||||||
scoped_ptr<BrowserWindow> browser_window_;
|
scoped_ptr<BrowserWindow> browser_window_;
|
||||||
|
@ -171,6 +171,29 @@ void ModifyZoom(CefRefPtr<CefBrowser> browser, double delta) {
|
|||||||
browser->GetHost()->GetZoomLevel() + delta);
|
browser->GetHost()->GetZoomLevel() + delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModifyFPS(CefRefPtr<CefBrowser> browser, int fps_delta) {
|
||||||
|
if (!CefCurrentlyOn(TID_UI)) {
|
||||||
|
// Execute on the UI thread.
|
||||||
|
CefPostTask(TID_UI, base::Bind(&ModifyFPS, browser, fps_delta));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fps;
|
||||||
|
if (fps_delta == 0) {
|
||||||
|
// Reset to the default value.
|
||||||
|
CefBrowserSettings settings;
|
||||||
|
MainContext::Get()->PopulateBrowserSettings(&settings);
|
||||||
|
fps = settings.windowless_frame_rate;
|
||||||
|
} else {
|
||||||
|
// Modify the existing value.
|
||||||
|
fps = browser->GetHost()->GetWindowlessFrameRate() + fps_delta;
|
||||||
|
if (fps <= 0)
|
||||||
|
fps = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
browser->GetHost()->SetWindowlessFrameRate(fps);
|
||||||
|
}
|
||||||
|
|
||||||
void BeginTracing() {
|
void BeginTracing() {
|
||||||
if (!CefCurrentlyOn(TID_UI)) {
|
if (!CefCurrentlyOn(TID_UI)) {
|
||||||
// Execute on the UI thread.
|
// Execute on the UI thread.
|
||||||
@ -318,6 +341,15 @@ void RunTest(CefRefPtr<CefBrowser> browser, int id) {
|
|||||||
case ID_TESTS_ZOOM_RESET:
|
case ID_TESTS_ZOOM_RESET:
|
||||||
browser->GetHost()->SetZoomLevel(0.0);
|
browser->GetHost()->SetZoomLevel(0.0);
|
||||||
break;
|
break;
|
||||||
|
case ID_TESTS_FPS_INCREASE:
|
||||||
|
ModifyFPS(browser, 10);
|
||||||
|
break;
|
||||||
|
case ID_TESTS_FPS_DECREASE:
|
||||||
|
ModifyFPS(browser, -10);
|
||||||
|
break;
|
||||||
|
case ID_TESTS_FPS_RESET:
|
||||||
|
ModifyFPS(browser, 0);
|
||||||
|
break;
|
||||||
case ID_TESTS_TRACING_BEGIN:
|
case ID_TESTS_TRACING_BEGIN:
|
||||||
BeginTracing();
|
BeginTracing();
|
||||||
break;
|
break;
|
||||||
|
@ -135,6 +135,11 @@ void AddMenuItem(NSMenu *menu, NSString* label, int idval) {
|
|||||||
AddMenuItem(testMenu, @"Zoom In", ID_TESTS_ZOOM_IN);
|
AddMenuItem(testMenu, @"Zoom In", ID_TESTS_ZOOM_IN);
|
||||||
AddMenuItem(testMenu, @"Zoom Out", ID_TESTS_ZOOM_OUT);
|
AddMenuItem(testMenu, @"Zoom Out", ID_TESTS_ZOOM_OUT);
|
||||||
AddMenuItem(testMenu, @"Zoom Reset", ID_TESTS_ZOOM_RESET);
|
AddMenuItem(testMenu, @"Zoom Reset", ID_TESTS_ZOOM_RESET);
|
||||||
|
if (with_osr_) {
|
||||||
|
AddMenuItem(testMenu, @"FPS Increase", ID_TESTS_FPS_INCREASE);
|
||||||
|
AddMenuItem(testMenu, @"FPS Decrease", ID_TESTS_FPS_DECREASE);
|
||||||
|
AddMenuItem(testMenu, @"FPS Reset", ID_TESTS_FPS_RESET);
|
||||||
|
}
|
||||||
AddMenuItem(testMenu, @"Begin Tracing", ID_TESTS_TRACING_BEGIN);
|
AddMenuItem(testMenu, @"Begin Tracing", ID_TESTS_TRACING_BEGIN);
|
||||||
AddMenuItem(testMenu, @"End Tracing", ID_TESTS_TRACING_END);
|
AddMenuItem(testMenu, @"End Tracing", ID_TESTS_TRACING_END);
|
||||||
AddMenuItem(testMenu, @"Print", ID_TESTS_PRINT);
|
AddMenuItem(testMenu, @"Print", ID_TESTS_PRINT);
|
||||||
|
@ -80,6 +80,9 @@ BEGIN
|
|||||||
MENUITEM "Zoom In", ID_TESTS_ZOOM_IN
|
MENUITEM "Zoom In", ID_TESTS_ZOOM_IN
|
||||||
MENUITEM "Zoom Out", ID_TESTS_ZOOM_OUT
|
MENUITEM "Zoom Out", ID_TESTS_ZOOM_OUT
|
||||||
MENUITEM "Zoom Reset", ID_TESTS_ZOOM_RESET
|
MENUITEM "Zoom Reset", ID_TESTS_ZOOM_RESET
|
||||||
|
MENUITEM "FPS Increase", ID_TESTS_FPS_INCREASE
|
||||||
|
MENUITEM "FPS Decrease", ID_TESTS_FPS_DECREASE
|
||||||
|
MENUITEM "FPS Reset", ID_TESTS_FPS_RESET
|
||||||
MENUITEM "Begin Tracing", ID_TESTS_TRACING_BEGIN
|
MENUITEM "Begin Tracing", ID_TESTS_TRACING_BEGIN
|
||||||
MENUITEM "End Tracing", ID_TESTS_TRACING_END
|
MENUITEM "End Tracing", ID_TESTS_TRACING_END
|
||||||
MENUITEM "Print", ID_TESTS_PRINT
|
MENUITEM "Print", ID_TESTS_PRINT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user