// 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 "ui/ozone/demo/software_renderer.h"

#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "ui/gfx/vsync_provider.h"
#include "ui/ozone/public/ozone_platform.h"
#include "ui/ozone/public/surface_factory_ozone.h"
#include "ui/ozone/public/surface_ozone_canvas.h"

namespace ui {
namespace {

const int kFrameDelayMilliseconds = 16;

}  // namespace

SoftwareRenderer::SoftwareRenderer(gfx::AcceleratedWidget widget,
                                   const gfx::Size& size)
    : RendererBase(widget, size),
      vsync_period_(base::TimeDelta::FromMilliseconds(kFrameDelayMilliseconds)),
      weak_ptr_factory_(this) {
}

SoftwareRenderer::~SoftwareRenderer() {
}

bool SoftwareRenderer::Initialize() {
  software_surface_ = ui::OzonePlatform::GetInstance()
                          ->GetSurfaceFactoryOzone()
                          ->CreateCanvasForWidget(widget_);
  if (!software_surface_) {
    LOG(ERROR) << "Failed to create software surface";
    return false;
  }

  software_surface_->ResizeCanvas(size_);
  vsync_provider_ = software_surface_->CreateVSyncProvider();
  RenderFrame();
  return true;
}

void SoftwareRenderer::RenderFrame() {
  float fraction = NextFraction();

  skia::RefPtr<SkSurface> surface = software_surface_->GetSurface();

  SkColor color =
      SkColorSetARGB(0xff, 0, 0xff * fraction, 0xff * (1 - fraction));

  surface->getCanvas()->clear(color);

  software_surface_->PresentCanvas(gfx::Rect(size_));

  if (vsync_provider_) {
    vsync_provider_->GetVSyncParameters(
        base::Bind(&SoftwareRenderer::UpdateVSyncParameters,
                   weak_ptr_factory_.GetWeakPtr()));
  }

  timer_.Start(FROM_HERE, vsync_period_, this, &SoftwareRenderer::RenderFrame);
}

void SoftwareRenderer::UpdateVSyncParameters(const base::TimeTicks timebase,
                                             const base::TimeDelta interval) {
  vsync_period_ = interval;
}

}  // namespace ui
