User:Roc/WorkerCanvasProposal: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 3: Line 3:
  [Constructor(unsigned long width, unsigned long height)]
  [Constructor(unsigned long width, unsigned long height)]
  interface WorkerCanvas {
  interface WorkerCanvas {
   readonly attribute unsigned long width;
   attribute unsigned long width;
   readonly attribute unsigned long height;
   attribute unsigned long height;
  void resize(unsigned long width, unsigned long height);
   RenderingContext? getContext(DOMString contextId, any... arguments);  
   RenderingContext? getContext(DOMString contextId, any... arguments);  
   void toBlob(FileCallback? _callback, optional DOMString type, any... arguments);
   void toBlob(FileCallback? _callback, optional DOMString type, any... arguments);

Revision as of 01:23, 18 October 2013

WebIDL

[Constructor(unsigned long width, unsigned long height)]
interface WorkerCanvas {
  attribute unsigned long width;
  attribute unsigned long height;
  RenderingContext? getContext(DOMString contextId, any... arguments); 
  void toBlob(FileCallback? _callback, optional DOMString type, any... arguments);
  ImageBitmap transferToImageBitmap();
};

partial interface RenderingContext {
  void commit();
};

WorkerCanvas implements Transferable;

partial interface HTMLCanvasElement {
  WorkerCanvas transferControlToWorker();
};

partial interface HTMLImageElement {
  attribute (Blob or ImageBitmap)? srcObject;
};

Spec changes

Structured clone of ImageBitmaps has to be defined; since they're immutable, it's straightforward. The implementation can share the underlying buffer data across threads. An ImageBitmap can also be implemented as the result of deferred rendering of a list of drawing commands.

transferControlToWorker behaves like transferControlToProxy in the current WHATWG spec. It's transferable, but transfer fails if transferred other than from the main thread to a worker. All its methods throw if not called on a worker, or if it's neutered.

HTMLImageElement.srcObject behaves like HTMLMediaElement.srcObject: if non-null, it takes precedence over the "src" attribute and renders the contents of the Blob (as a decoded image) or the ImageBitmap.