| Index: src/utils/debugger/SkDrawCommand.cpp | 
| diff --git a/src/utils/debugger/SkDrawCommand.cpp b/src/utils/debugger/SkDrawCommand.cpp | 
| index 1d28d2e8e0cbb195ff4629bb82e74a6c9ebcb1b0..15fc9ca8fbba996314d3e6f390f9a408dd5c127a 100644 | 
| --- a/src/utils/debugger/SkDrawCommand.cpp | 
| +++ b/src/utils/debugger/SkDrawCommand.cpp | 
| @@ -36,6 +36,8 @@ const char* SkDrawCommand::GetCommandString(OpType type) { | 
| case kDrawBitmapRect_OpType: return "DrawBitmapRect"; | 
| case kDrawClear_OpType: return "DrawClear"; | 
| case kDrawDRRect_OpType: return "DrawDRRect"; | 
| +        case kDrawImage_OpType: return "DrawImage"; | 
| +        case kDrawImageRect_OpType: return "DrawImageRect"; | 
| case kDrawOval_OpType: return "DrawOval"; | 
| case kDrawPaint_OpType: return "DrawPaint"; | 
| case kDrawPatch_OpType: return "DrawPatch"; | 
| @@ -358,6 +360,64 @@ bool SkDrawBitmapRectCommand::render(SkCanvas* canvas) const { | 
| return true; | 
| } | 
|  | 
| +SkDrawImageCommand::SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, | 
| +                                       const SkPaint* paint) | 
| +    : INHERITED(kDrawImage_OpType) | 
| +    , fImage(SkRef(image)) | 
| +    , fLeft(left) | 
| +    , fTop(top) { | 
| + | 
| +    if (paint) { | 
| +        fPaint.set(*paint); | 
| +    } | 
| +} | 
| + | 
| +void SkDrawImageCommand::execute(SkCanvas* canvas) const { | 
| +    canvas->drawImage(fImage, fLeft, fTop, fPaint.getMaybeNull()); | 
| +} | 
| + | 
| +bool SkDrawImageCommand::render(SkCanvas* canvas) const { | 
| +    SkAutoCanvasRestore acr(canvas, true); | 
| +    canvas->clear(0xFFFFFFFF); | 
| + | 
| +    xlate_and_scale_to_bounds(canvas, SkRect::MakeXYWH(fLeft, fTop, | 
| +                                                       SkIntToScalar(fImage->width()), | 
| +                                                       SkIntToScalar(fImage->height()))); | 
| +    this->execute(canvas); | 
| +    return true; | 
| +} | 
| + | 
| +SkDrawImageRectCommand::SkDrawImageRectCommand(const SkImage* image, const SkRect* src, | 
| +                                               const SkRect& dst, const SkPaint* paint, | 
| +                                               SkCanvas::SrcRectConstraint constraint) | 
| +    : INHERITED(kDrawImageRect_OpType) | 
| +    , fImage(SkRef(image)) | 
| +    , fDst(dst) | 
| +    , fConstraint(constraint) { | 
| + | 
| +    if (src) { | 
| +        fSrc.set(*src); | 
| +    } | 
| + | 
| +    if (paint) { | 
| +        fPaint.set(*paint); | 
| +    } | 
| +} | 
| + | 
| +void SkDrawImageRectCommand::execute(SkCanvas* canvas) const { | 
| +    canvas->drawImageRect(fImage, fSrc.getMaybeNull(), fDst, fPaint.getMaybeNull(), fConstraint); | 
| +} | 
| + | 
| +bool SkDrawImageRectCommand::render(SkCanvas* canvas) const { | 
| +    SkAutoCanvasRestore acr(canvas, true); | 
| +    canvas->clear(0xFFFFFFFF); | 
| + | 
| +    xlate_and_scale_to_bounds(canvas, fDst); | 
| + | 
| +    this->execute(canvas); | 
| +    return true; | 
| +} | 
| + | 
| SkDrawOvalCommand::SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint) | 
| : INHERITED(kDrawOval_OpType) { | 
| fOval = oval; | 
|  |