Tear down ImageBuffer's reference to HTMLCanvasElement via ImageBufferClient

As a first step to remove ImageBuffer(Surface), this CL refactors the
followings:
- Remove ImageBufferClient and break ImageBuffer's reference to canvas element
- Move ImageBuffer's various functions to HTMLCanvasElement, including
    UpdateGPUMemoryUsage, DisableAcceleration, gpu_readback_frame computation,
    etc.)
- Introduce abstract class CanvasResourceHost as a way for
    Canvas2DLayerBridge (and temporarily, RecordingImageBufferSurface) to point
    to HTMLCanvasElement.
- Reconcile UpdateGPUMemoryUsage() and UpdateExternallyAllocatedMemory() in one
    single function.


Bug: 776806
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I7b3fdfad476c02b6e4368d3ef1e5eca9688cbf5b
Reviewed-on: https://chromium-review.googlesource.com/774996
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Justin Novosad <junov@chromium.org>
Commit-Queue: Olivia Lai <xlai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#518980}
27 files changed