Граф коммитов

13 Коммитов

Автор SHA1 Сообщение Дата
Cody Northrop a7cbb3f06f Capture/Replay: Allow starting capture at an unknown frame
This CL adds a new way to set the start frame of a capture.
It adds a new environment variable called ANGLE_CAPTURE_TRIGGER
that, when set, will be used instead of frame start and end.

By setting ANGLE_CAPTURE_TRIGGER to a non-zero value, ANGLE will
capture that many frames when the value changes. For example,
on Android, we can set it with:

  adb shell setprop debug.angle.capture.trigger 20

When we reach the target content, set the value back to zero:

  adb shell setprop debug.angle.capture.trigger 0

and ANGLE will start capturing 20 frames.

Currently only hooked up for Android, but should be possible to
support on other platforms.

Test: Capture application frames using trigger
Bug: angleproject:4949
Change-Id: I469ef5c48feb78c85b8cda2fefd5df59e495bbe2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2347858
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Manh Nguyen <nguyenmh@google.com>
2020-08-11 22:24:58 +00:00
Manh Nguyen 559d54d080 Update readme with how to run regression testing script
Updates CaptureAndReplay.md with how to run capture_replay_tests.py.
Explains certain important flags and their effects on the behavior
of the script.

Bug: angleproject:4817
Change-Id: I628edf57cde51d2a6f667fbfd7dc937964badbac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336188
Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
2020-08-10 18:34:57 +00:00
Manh Nguyen 3b0c99180d Update CaptureAndReplay.md and Python script with links
Links to the Python script in CaptureAndReplay.md
Links to CaptureAndReplay.md's testing section in the Python script

Bug: angleproject:4817
Change-Id: I584f8508661950e4907dae1adb8f0fe300387198
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309226
Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
2020-07-27 15:17:02 +00:00
Manh Nguyen 10e9e9a118 Apply multiprocessing to capture_replay_tests.py
Multiple tests are run in paralell to squeeze the most out of CPUs.
Tests are stored in a work queue. Whenever a CPU becomes available,
the next unrun test is grabbed and run on a spawn process on that CPU.

Each cpu gets their own environment and build folders and trace folders
so that tests don't overwrite each other.

Bug: angleproject:4817
Change-Id: Ifd35c9c75522e480b0257d090d5af70f2a3428ba
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2296040
Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
2020-07-21 14:24:21 +00:00
Manh Nguyen dce37b7da8 Serialize framebuffers + compare contexts for CaptureReplayTests
Adds to frame capture the ability to serialize a frame's pre-swap
GL state and store it in the binary data file
Adds to CaptureReplayTests the ability to compare its serialized GL
state with the serialized state pulled from the binary data file
Adds a serialization module that serializes framebuffers' GL states
and the contents of their color attachments
Adds checks to automation script so that it would skips tests that
do not produce the expected trace files
Adds exception handling to automation script so that it will not crash
when a replay build crashes

Bug: angleproject:4779
Change-Id: I40a02e018073749e79f0ddbfd3d4065745548f46
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2258295
Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@google.com>
2020-07-02 21:37:40 +00:00
Jamie Madill 7e453a2537 Capture/Replay: Use zlib to compress data files.
Gives about a 2-3x reduced data file size. Should help reduce the time
we spent transferring trace files on Android.

This feature is implemented as a parameter to the capture/replay tool.
This keeps backwards compatiblity if we ever need to integrate a cpp
replay into an environment that doesn't have access to zlib for
decompression.

We'll need to update the traces to take advantage of the compression.

Bug: angleproject:4484
Change-Id: Id7994efe3c0d529b85fa7e7f1b00444e630dd2cd
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2104555
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
2020-03-18 17:05:28 +00:00
Cody Northrop 1d77542f56 Add flag to label captures
Add an optional parameter (ANGLE_CAPTURE_LABEL) to
ANGLE frame capture that tags files and functions
uniquely, allowing multiple frame captures to be
replayed by a test harness.

Example:

  ANGLE_CAPTURE_LABEL=foo

Results in filenames like this:

  foo_capture_context1.cpp
  foo_capture_context1.h
  foo_capture_context1_files.txt
  foo_capture_context1_frame000.angledata
  foo_capture_context1_frame000.cpp
  foo_capture_context1_frame001.angledata
  foo_capture_context1_frame001.cpp
  ...

Functions wrapped in namespaces like this:

  namespace foo
  {
      void ReplayContext1Frame0();
      void ReplayContext1Frame1();
  }

For use like this:

  foo::SetupContext1Replay();
  for (...)
  {
      foo::ReplayContext1Frame(i);
  }

Bug: angleproject:3630
Change-Id: Ibe27dc4d40a36606ee40678a9e4d43b5a4baf976
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1949603
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
2019-12-13 00:09:47 +00:00
Cody Northrop 6430e5e003 Enable frame capture on Android
This CL gets capture/replay working on Android again.
* Updates where Android frame captures are written
* Uses debug system properties to prime Android environment variables
* Adds a configurable target Context to the capture_replay sample
* Updates capture/replay documentation for Android

Bug: angleproject:4036
Test: Captured TRex on Android, replayed on Linux
Change-Id: I94b4f6dc77468cd179b9d884b4dcd4afa56bd28c
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1928056
Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
2019-11-22 23:13:29 +00:00
Jamie Madill 653ee5f115 Capture/Replay: Introduce capture index file.
This index file lets us very easily write a generic capture sample.
Previously the dev had to maintain a list of multiple sources files.
Potentially hundreds. By writing the source file list to an index file
we can load this easily in GN as a variable and plug that into the
sources.

Also updates docs.

Bug: angleproject:3611
Change-Id: I69ba961e271d6d13d06ae01c89a0605a6fd725ec
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1902189
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
2019-11-07 14:28:55 +00:00
Jamie Madill 6c7208f93d Capture/Replay: Implement mid-execution replay.
Mid-execution replay starts the replay from a specific start frame
instead of frame 0. Integration tests will then run between the start
and end frames. This lets us make much smaller reproduction cases from
large benchmarks or applications.

We implement mid-execution replay via a cpp "Setup" function. The
replay test will run the setup function before the starting frame. Test
execution proceeds normally after setup.

Currently we do not implement mid-execution capture. We run capture on
all frames. Including frames before the start frame. We do this to
intercept compiled shaders and programs for easier caching. This could
be changed in the future to also start capture mid-execution. Mid-
execution capture might require using ProgramBinary calls to capture
shader and program data.

Many captures are unimplemented. Several comments indicate missing
functionality. There's a lot we can add as we explore replaying more
complex applications and higher GL versions. We will also need some
kind of state reset functionality so we can run the replay in a loop.

Bug: angleproject:3611
Change-Id: I51841fc1a64e3622c34e49c85ed8919a9a7c0b20
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1689329
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
2019-11-03 03:47:41 +00:00
Jamie Madill 664be3f8a3 Capture/Replay: Fix docs link.
Should be samples/capture_replay not samples/capture_and_replay.

Bug: angleproject:3611
Change-Id: I5de4849c875add39df36f7875482e4dc91ca0ca6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1880158
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
2019-10-25 16:03:38 +00:00
Jamie Madill f251995def Capture/Replay: Write capture index file.
This file will be used with multi-frame captures to share common code.
Common code is global state, resource maps, and a list of frame replay
functions. This should make converting a CPP replay into a functional
test quite a bit simpler. The replay files will now be something like:

angle_capture_context1.cpp
angle_capture_context1.h
angle_capture_context1_frame000.cpp
angle_capture_context1_frame001.cpp
... etc

Also adds a template for adding a capture/replay sample. Instructions
are located in samples/BUILD.gn and docs in doc/CaptureAndReplay.md.

Bug: angleproject:3611
Change-Id: I437b338fd84689d670a7d9e3e219d9334de25fd8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1869543
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tobin Ehlis <tobine@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
2019-10-24 21:46:04 +00:00
Jamie Madill a2e66a5e52 Capture/Replay: Introduce environment options and docs.
Introduces a few ways of controlling capture via:

 * `ANGLE_CAPTURE_ENABLED`:
   Can be set to "0" to disable capture entirely.
 * `ANGLE_CAPTURE_OUT_DIR`:
   Can specify an alternate directory than the CWD.
 * `ANGLE_CAPTURE_FRAME_END`:
   This variable can override the default of 10 frame to capture.

Also adds a simple usage guide document.

Bug: angleproject:3611
Change-Id: I49d32d5bae2c490dcbeb0f1ce3c6038e433adfaa
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1869542
Reviewed-by: Tobin Ehlis <tobine@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
2019-10-24 20:09:14 +00:00