blob: 619b66a791ab254e3cc8672711ff40eff41bd495 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/surfaces/surfaces_service_application.h"
#include "cc/surfaces/display.h"
#include "mojo/application/application_runner_chromium.h"
#include "mojo/common/tracing_impl.h"
#include "mojo/public/c/system/main.h"
#include "services/surfaces/surfaces_service_impl.h"
namespace mojo {
SurfacesServiceApplication::SurfacesServiceApplication()
: tick_interval_(base::TimeDelta::FromMilliseconds(17)),
next_id_namespace_(1u),
display_(NULL),
draw_timer_(false, false) {
}
SurfacesServiceApplication::~SurfacesServiceApplication() {
}
void SurfacesServiceApplication::Initialize(ApplicationImpl* app) {
TracingImpl::Create(app);
}
bool SurfacesServiceApplication::ConfigureIncomingConnection(
ApplicationConnection* connection) {
connection->AddService(this);
return true;
}
void SurfacesServiceApplication::Create(
ApplicationConnection* connection,
InterfaceRequest<SurfacesService> request) {
new SurfacesServiceImpl(&manager_, &next_id_namespace_, this, request.Pass());
}
void SurfacesServiceApplication::OnVSyncParametersUpdated(
base::TimeTicks timebase,
base::TimeDelta interval) {
tick_interval_ = interval;
}
void SurfacesServiceApplication::FrameSubmitted() {
if (!draw_timer_.IsRunning() && display_) {
draw_timer_.Start(FROM_HERE, tick_interval_,
base::Bind(base::IgnoreResult(&cc::Display::Draw),
base::Unretained(display_)));
}
}
void SurfacesServiceApplication::SetDisplay(cc::Display* display) {
draw_timer_.Stop();
display_ = display;
}
void SurfacesServiceApplication::OnDisplayBeingDestroyed(cc::Display* display) {
if (display_ == display)
SetDisplay(nullptr);
}
} // namespace mojo
MojoResult MojoMain(MojoHandle shell_handle) {
mojo::ApplicationRunnerChromium runner(new mojo::SurfacesServiceApplication);
return runner.Run(shell_handle);
}