| Index: mojo/examples/sample_app/gles2_client_impl.cc
|
| diff --git a/mojo/examples/sample_app/gles2_client_impl.cc b/mojo/examples/sample_app/gles2_client_impl.cc
|
| index 3dd943d8361f27f0bd98076a31c6e27057c26d65..644645ce052632f71ef9f7bfbea455add2aea657 100644
|
| --- a/mojo/examples/sample_app/gles2_client_impl.cc
|
| +++ b/mojo/examples/sample_app/gles2_client_impl.cc
|
| @@ -22,7 +22,8 @@ float CalculateDragDistance(const gfx::PointF& start, const Point& end) {
|
| }
|
|
|
| GLES2ClientImpl::GLES2ClientImpl(ScopedMessagePipeHandle pipe)
|
| - : service_(pipe.Pass(), this) {
|
| + : getting_animation_frames_(false),
|
| + service_(pipe.Pass(), this) {
|
| }
|
|
|
| GLES2ClientImpl::~GLES2ClientImpl() {
|
| @@ -33,14 +34,14 @@ void GLES2ClientImpl::HandleInputEvent(const Event& event) {
|
| switch (event.action()) {
|
| case ui::ET_MOUSE_PRESSED:
|
| case ui::ET_TOUCH_PRESSED:
|
| - timer_.Stop();
|
| + CancelAnimationFrames();
|
| capture_point_.SetPoint(event.location().x(), event.location().y());
|
| last_drag_point_ = capture_point_;
|
| - drag_start_time_ = base::Time::Now();
|
| + drag_start_time_ = GetTimeTicksNow();
|
| break;
|
| case ui::ET_MOUSE_DRAGGED:
|
| case ui::ET_TOUCH_MOVED:
|
| - if (!timer_.IsRunning()) {
|
| + if (!getting_animation_frames_) {
|
| int direction = event.location().y() < last_drag_point_.y() ||
|
| event.location().x() > last_drag_point_.x() ? 1 : -1;
|
| cube_.set_direction(direction);
|
| @@ -54,12 +55,14 @@ void GLES2ClientImpl::HandleInputEvent(const Event& event) {
|
| break;
|
| case ui::ET_MOUSE_RELEASED:
|
| case ui::ET_TOUCH_RELEASED: {
|
| + MojoTimeTicks offset = GetTimeTicksNow() - drag_start_time_;
|
| + float delta = static_cast<float>(offset) / 1000000.;
|
| cube_.SetFlingMultiplier(
|
| CalculateDragDistance(capture_point_, event.location()),
|
| - base::TimeDelta(base::Time::Now() - drag_start_time_).InSecondsF());
|
| + delta);
|
|
|
| capture_point_ = last_drag_point_ = gfx::PointF();
|
| - StartTimer();
|
| + RequestAnimationFrames();
|
| }
|
| break;
|
| default:
|
| @@ -73,27 +76,33 @@ void GLES2ClientImpl::DidCreateContext(uint64_t encoded,
|
| MojoGLES2MakeCurrent(encoded);
|
|
|
| cube_.Init(width, height);
|
| - StartTimer();
|
| + RequestAnimationFrames();
|
| }
|
|
|
| void GLES2ClientImpl::ContextLost() {
|
| - timer_.Stop();
|
| + CancelAnimationFrames();
|
| }
|
|
|
| -void GLES2ClientImpl::Draw() {
|
| - base::Time now = base::Time::Now();
|
| - base::TimeDelta offset = now - last_time_;
|
| +void GLES2ClientImpl::DrawAnimationFrame() {
|
| + MojoTimeTicks now = GetTimeTicksNow();
|
| + MojoTimeTicks offset = now - last_time_;
|
| + float delta = static_cast<float>(offset) / 1000000.;
|
| last_time_ = now;
|
| - cube_.UpdateForTimeDelta(offset.InSecondsF());
|
| + cube_.UpdateForTimeDelta(delta);
|
| cube_.Draw();
|
|
|
| MojoGLES2SwapBuffers();
|
| }
|
|
|
| -void GLES2ClientImpl::StartTimer() {
|
| - last_time_ = base::Time::Now();
|
| - timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(16),
|
| - this, &GLES2ClientImpl::Draw);
|
| +void GLES2ClientImpl::RequestAnimationFrames() {
|
| + getting_animation_frames_ = true;
|
| + service_->RequestAnimationFrames();
|
| + last_time_ = GetTimeTicksNow();
|
| +}
|
| +
|
| +void GLES2ClientImpl::CancelAnimationFrames() {
|
| + getting_animation_frames_ = false;
|
| + service_->CancelAnimationFrames();
|
| }
|
|
|
| } // namespace examples
|
|
|