// TODO(nifong): Complete this before turning on clojure optimizations in compile.sh

var DebuggerView = {
	MakeSWCanvasSurface: function() {},
	_getRasterDirectSurface: function() {},
	_malloc: function() {},
	_free: function() {},
	onRuntimeInitialized: function() {},
	SkpFilePlayer: function() {},
	MakeWebGLCanvasSurface: function() {},
	MakeGrContext: function() {},
	MakeOnScreenGLSurface: function() {},
	MakeCanvasSurface: function() {},

	ColorType: {
		RGBA_8888: {},
	},

	AlphaType: {
		Unpremul: {},
	},

	TRANSPARENT: {},

	SkSurface: {
		// public API (from C++ bindings)
		/** @return {DebuggerView.SkCanvas} */
		getCanvas: function() {},

		// private API
		_flush: function() {},
		delete: function() {},
	},

	SkpDebugPlayer: {
		SkpDebugPlayer: function() {},
		loadSkp: function() {},
		drawTo: function() {},
		getBounds: function() {},
		setOverdrawVis: function() {},
		setGpuOpBounds: function() {},
		setClipVizColor: function() {},
		getSize: function() {},
		deleteCommand: function() {},
		setCommandVisibility: function() {},
		jsonCommandList: function() {},
		lastCommandInfo: function() {},
	},

	/**
	 * @type {Uint8Array}
	 */
	HEAPU8: {},
};

// Public API things that are newly declared in the JS should go here.
// It's not enough to declare them above, because closure can still erase them
// unless they go on the prototype.

DebuggerView.SkSurface.prototype.flush = function() {};
DebuggerView.SkSurface.prototype.dispose = function() {};