diff --git a/docs/user-manual/scripting/debugging/browser-dev-tools.md b/docs/user-manual/debugging/browser-dev-tools.md
similarity index 95%
rename from docs/user-manual/scripting/debugging/browser-dev-tools.md
rename to docs/user-manual/debugging/browser-dev-tools.md
index 48e446f7991..370c3aa9f76 100644
--- a/docs/user-manual/scripting/debugging/browser-dev-tools.md
+++ b/docs/user-manual/debugging/browser-dev-tools.md
@@ -11,11 +11,11 @@ Chrome, Firefox and other browsers have Developer Tools integrated directly into
In order to debug your scripts, select the Sources tab in Developer Tools (Chrome). Open the 'navigator' by clicking the icon in the top left corner of the Sources pane. You should see something similar to what is shown below:
-
+
In Firefox it looks like this:
-
+
The navigator lists all of the scripts currently running in the active tab, including any PlayCanvas scripts that you have written. Find one of your scripts in the navigator and select it to open the source code. You are now able to set breakpoints and debug.
diff --git a/docs/user-manual/scripting/debugging/console-logging.md b/docs/user-manual/debugging/console-logging.md
similarity index 100%
rename from docs/user-manual/scripting/debugging/console-logging.md
rename to docs/user-manual/debugging/console-logging.md
diff --git a/docs/user-manual/scripting/debugging/index.md b/docs/user-manual/debugging/index.md
similarity index 55%
rename from docs/user-manual/scripting/debugging/index.md
rename to docs/user-manual/debugging/index.md
index f1676e37ddb..f725291e475 100644
--- a/docs/user-manual/scripting/debugging/index.md
+++ b/docs/user-manual/debugging/index.md
@@ -1,9 +1,9 @@
---
title: Debugging
-description: Tools and techniques for finding and fixing bugs in your PlayCanvas scripts using browser developer tools.
+description: Tools and techniques for finding and fixing bugs in PlayCanvas applications, with logging, the browser developer tools, the Inspector and debug drawing.
---
-Debugging is essential for identifying and fixing issues in your PlayCanvas scripts. When your code doesn't behave as expected, these tools and techniques will help you quickly find and resolve problems.
+Debugging is essential for identifying and fixing issues in your PlayCanvas application, in its scripts as well as in what it renders and loads. When it doesn't behave as expected, these tools and techniques will help you quickly find and resolve problems. To find out why it runs slowly, see [Which Tool to Use](/user-manual/optimization/#which-tool-to-use).
## Debugging Techniques
@@ -24,3 +24,9 @@ Use breakpoints, step-through debugging, and performance profiling to deeply ins
Look inside the running application: its entities and components, cameras, assets and GPU resources, the passes of each frame, and the draws of a pass one at a time.
**[Learn the Inspector â](./inspector.md)**
+
+### Debug Drawing
+
+Draw lines, shapes and textures over the scene to see what your code computes, such as bounds and directions, or the content of a render target and the depth of the scene.
+
+**[Learn Debug Drawing â](/user-manual/graphics/debug-drawing/)**
diff --git a/docs/user-manual/scripting/debugging/inspector.md b/docs/user-manual/debugging/inspector.md
similarity index 88%
rename from docs/user-manual/scripting/debugging/inspector.md
rename to docs/user-manual/debugging/inspector.md
index 961d7da203f..778f32c4e7f 100644
--- a/docs/user-manual/scripting/debugging/inspector.md
+++ b/docs/user-manual/debugging/inspector.md
@@ -1,11 +1,11 @@
---
title: Inspector
-description: Inspect a running PlayCanvas application in a debug panel - its entities, cameras, assets, frame graph, GPU resources, scripts and shaders - and step through the draws of a frame.
+description: Inspect a running PlayCanvas application in a debug panel - its entities, cameras, assets, frame graph, GPU resources, scripts and shaders - step through the draws of a frame, and record its performance.
---
The Inspector is a debug panel for a running PlayCanvas application. It docks over the canvas and shows the application's scene, GPU resources and rendered frames as they are now, with the properties of whatever you select updating live below.
-
+
Use it to answer questions such as:
@@ -13,6 +13,7 @@ Use it to answer questions such as:
- Which material and shader does a mesh draw with, and which textures does it use?
- What does a frame render, in which passes and in what order?
- Where does the video memory go?
+- Which frames are slow, and what holds them back?
The Inspector only reads the application. The changes it makes are the ones you ask for: turning entities on and off, pausing and stepping the application, and view-only overrides (render modes, wireframe and a flown or orbited camera), which it removes when it closes.
@@ -56,6 +57,7 @@ app.root.addChild(entity);
| `toggleKey` | `` 'Backquote' `` | The key that shows and hides the panel. |
| `pauseKey` | `'F9'` | The key that pauses and resumes the application. |
| `stepKey` | `'F10'` | The key that advances one frame while paused. |
+| `record` | `false` | Whether to start recording frames on the Performance tab. Created before the application's first frame, the Inspector records its start too, see [Recording the Start of the Application](/user-manual/optimization/inspector-performance/#recording-the-start-of-the-application). |
| `storageKey` | `'pc-inspector'` | The local storage key the panel's settings are kept under, such as the active tab and the panel width. `null` keeps nothing. |
## The Toolbar
@@ -82,6 +84,7 @@ Each tab lists one kind of object, and the property view below it shows the sele
| **Cameras** | The cameras in render order, with where each draws. A render mode shows the scene's material inputs instead of the final image, such as albedo, world normals or lighting, for one camera or all of them, and the scene can be drawn in wireframe. |
| **Assets** | Every asset in the registry, with its file, its load state and what uses it. |
| **Frame graph** | The passes that rendered the last frame, in order, with the layers, draws and render targets of each. **GPU timings** shows the time each pass takes on the GPU where the device can measure it, **Freeze** keeps showing the current frame while the application runs on, and **Preview** draws the selected pass's render target over the view. |
+| **Performance** | Records the frames of the application and charts their frame, CPU, GPU and script times, what loaded, memory and resources over time, with each frame on a timeline of its own. See [Inspector Performance](/user-manual/optimization/inspector-performance/). |
| **Render targets** | The render targets on the device, with the passes that rendered into them and a live preview of a chosen attachment. |
| **Textures** | The textures on the device, largest first, with a live preview and a choice of channels to show. |
| **Meshes** | The meshes of the application, largest first, with their geometry and what uses them. |
@@ -91,7 +94,7 @@ Each tab lists one kind of object, and the property view below it shows the sele
| **Shaders** | The compiled shaders, with their sources. |
| **Physics** | The rigid bodies and joints of the physics world, and an option to draw the world over the scene. |
-
+
## Stepping Through a Frame
@@ -102,7 +105,7 @@ The Frame graph tab can draw a frame one draw call at a time, to see how the ima
3. Press the Up and Down arrow keys to step back and forward one draw at a time. The property view lists the drawn mesh instances with the current one highlighted, the view outlines it, and the status bar shows its number, such as *draw 8 of 12 · World opaque*. Expand an entry to see more about it, such as its mesh and material.
4. Turn off **Debug frame** to draw the full frame again.
-
+
:::note
Stepping through draws needs the debug build of the engine, and the option is disabled with other builds. Bundlers such as Vite pick the debug build in development through the `development` export condition of the `playcanvas` package.
diff --git a/docs/user-manual/getting-started/migrating-from-unity.md b/docs/user-manual/getting-started/migrating-from-unity.md
index f47081ca987..24d7a98fd48 100644
--- a/docs/user-manual/getting-started/migrating-from-unity.md
+++ b/docs/user-manual/getting-started/migrating-from-unity.md
@@ -52,7 +52,7 @@ The Launch Page stays connected to the Editor. Changes to entities, components,
Scripts never run in the Editor's viewport, so there is nothing like Unity's `[ExecuteInEditMode]`: anything a script creates or changes appears only in the launched app.
-The Launch button's menu has options for testing: choose the graphics API, open the [Profiler](/user-manual/optimization/profiler/), [MiniStats](/user-manual/optimization/mini-stats/) or [Inspector](/user-manual/scripting/debugging/inspector/), and tick **Debug** to log the engine's warnings and errors to the console.
+The Launch button's menu has options for testing: choose the graphics API, open the [Profiler](/user-manual/optimization/profiler/), [MiniStats](/user-manual/optimization/mini-stats/) or [Inspector](/user-manual/debugging/inspector/), and tick **Debug** to log the engine's warnings and errors to the console.
### Navigating the Viewport {#navigating-the-viewport}
@@ -641,11 +641,11 @@ Your app runs in the browser, so you debug it with the browser's developer tools
| Unity | PlayCanvas |
| --- | --- |
-| Console window | The **Console** tab of the developer tools. See [Console Logging](/user-manual/scripting/debugging/console-logging/). |
-| Attaching Visual Studio or Rider | Breakpoints in the **Sources** tab of the developer tools. See [Browser Dev Tools](/user-manual/scripting/debugging/browser-dev-tools/). |
+| Console window | The **Console** tab of the developer tools. See [Console Logging](/user-manual/debugging/console-logging/). |
+| Attaching Visual Studio or Rider | Breakpoints in the **Sources** tab of the developer tools. See [Browser Dev Tools](/user-manual/debugging/browser-dev-tools/). |
| `Debug.Break()` | A `debugger;` statement, which pauses the app while the developer tools are open |
| Profiler | The [Profiler](/user-manual/optimization/profiler/) and [MiniStats](/user-manual/optimization/mini-stats/), from the Launch button's menu, and the **Performance** tab of the developer tools |
-| Frame Debugger | The [Inspector](/user-manual/scripting/debugging/inspector/), also from the Launch button's menu, which shows the render passes and draw calls of each frame, and [native GPU profilers](/user-manual/optimization/gpu-profiling/) |
+| Frame Debugger | The [Inspector](/user-manual/debugging/inspector/), also from the Launch button's menu, which shows the render passes and draw calls of each frame, and [native GPU profilers](/user-manual/optimization/gpu-profiling/) |
| `Debug.DrawLine` and Gizmos | `this.app.drawLine()`, and [`WireRenderer`](/user-manual/graphics/debug-drawing/) for spheres, boxes and other shapes |
## Version Control and Collaboration {#version-control-and-collaboration}
diff --git a/docs/user-manual/getting-started/start-with-create-playcanvas.md b/docs/user-manual/getting-started/start-with-create-playcanvas.md
index 88263113030..d4dc609ba06 100644
--- a/docs/user-manual/getting-started/start-with-create-playcanvas.md
+++ b/docs/user-manual/getting-started/start-with-create-playcanvas.md
@@ -85,7 +85,7 @@ To publish an Editor project as a Web Lens instead, see [Snapchat Web Lenses](/u
## Debug with the Inspector
-The development server loads the [Inspector](/user-manual/scripting/debugging/inspector/) for the running application. Press the backquote key (`` ` ``) to show or hide it, F9 to pause, and F10 to step one frame. Production builds do not include the Inspector.
+The development server loads the [Inspector](/user-manual/debugging/inspector/) for the running application. Press the backquote key (`` ` ``) to show or hide it, F9 to pause, and F10 to step one frame. Production builds do not include the Inspector.
## Skip the Prompts
diff --git a/docs/user-manual/optimization/index.md b/docs/user-manual/optimization/index.md
index d18da2de357..e3e347a267c 100644
--- a/docs/user-manual/optimization/index.md
+++ b/docs/user-manual/optimization/index.md
@@ -1,8 +1,26 @@
---
-title: Optimization
-description: Why and how to optimize load time, frame rate, CPU, GPU load, and memory in PlayCanvas applications.
+title: Debugging and Optimization
+description: Tools for finding bugs and performance problems in PlayCanvas applications, and why and how to optimize load time, frame rate, CPU and GPU load, and memory.
---
+This section covers the tools for looking inside a running PlayCanvas application, to find out why it does not behave as expected or does not perform as it should, and the ways of making it load and run faster.
+
+## Which Tool to Use {#which-tool-to-use}
+
+| To find out | Use |
+| ----------- | --- |
+| What your code does, and where it goes wrong | [Console Logging](/user-manual/debugging/console-logging/) and the [Browser Dev Tools](/user-manual/debugging/browser-dev-tools/) |
+| What the application holds: its entities and components, cameras, assets and GPU resources | The [Inspector](/user-manual/debugging/inspector/) |
+| How a frame renders, pass by pass and draw by draw | The Frame graph tab of the [Inspector](/user-manual/debugging/inspector/), and [stepping through a frame](/user-manual/debugging/inspector/#stepping-through-a-frame) |
+| What your code computes in the scene, such as bounds, directions or the content of a render target | [Debug Drawing](/user-manual/graphics/debug-drawing/) |
+| Whether the application keeps its frame rate as you use it | [MiniStats](/user-manual/optimization/mini-stats/) |
+| Which frames are slow, and what holds them back: the CPU, the GPU, scripts or loading | The [Performance tab of the Inspector](/user-manual/optimization/inspector-performance/) |
+| How long the application takes to start, and what loads when | The [Performance tab of the Inspector](/user-manual/optimization/inspector-performance/#recording-the-start-of-the-application), or the [Editor Profiler](/user-manual/optimization/profiler/) |
+| The statistics of the engine from code, for dashboards and automated comparisons | [Profiling with AppStats](/user-manual/optimization/app-stats/) |
+| What the GPU does within a frame, in detail | [GPU Profiling](/user-manual/optimization/gpu-profiling/) with the native GPU tools |
+
+## Optimization
+
Optimization is a critical part of developing a PlayCanvas application. It can mean the difference between a great user experience and a terrible one.
:::tip
@@ -20,17 +38,9 @@ Let's begin by establishing the key goals for optimization and highlight why eac
| ð Minimize CPU and GPU load | Just because your app maintains 60 frames per second does not mean your work is done. Reducing processor load preserves battery power and keeps devices running cool. |
| ð§ Minimize memory utilization | Browsers allocate a limited pool of memory to applications. Once this pool is exhausted, the tab will crash and reload. Your users will be upset! |
-## Measure Before Optimizing
-
-Choose a repeatable scene or interaction, record a baseline on the target device, then measure each change under the same conditions.
+### Measure Before Optimizing {#measure-before-optimizing}
-| Tool | Use it for |
-| ---- | ---------- |
-| [MiniStats](/user-manual/optimization/mini-stats/) | Watching frame time, CPU/GPU costs and GPU resource memory while interacting with the application. |
-| [Profiling with AppStats](/user-manual/optimization/app-stats/) | Reading public statistics from code and collecting reports for dashboards, agents and automated comparisons. |
-| [Editor Profiler](/user-manual/optimization/profiler/) | Inspecting the Editor Launch profiler, including asset loading and shader compilation timelines. |
-| [GPU Profiling](/user-manual/optimization/gpu-profiling/) | Capturing frames with native GPU tools for detailed rendering investigations. |
-| [Inspector](/user-manual/scripting/debugging/inspector/) | Finding where video memory goes, which passes and draws a frame makes, and what each mesh and material uses, in the running application. |
+Choose a repeatable scene or interaction, record a baseline on the target device, then measure each change under the same conditions, with the profiling tools in [Which Tool to Use](#which-tool-to-use). The [guidelines](/user-manual/optimization/guidelines/) and the pages after them describe what to change.
:::ai
Give an AI assistant a performance goal, repeatable scenario and baseline reports from **[AppStats](/user-manual/optimization/app-stats/#collecting-periodic-reports)**. It can combine these with MiniStats or browser evidence and propose one measurable change at a time. Use the **[Editor MCP Server](/user-manual/editor/mcp-server/)** to replay Editor input or follow **[Developing with AI](/user-manual/engine/developing-with-ai/)** for standalone projects.
diff --git a/docs/user-manual/optimization/inspector-performance.md b/docs/user-manual/optimization/inspector-performance.md
new file mode 100644
index 00000000000..a499562db91
--- /dev/null
+++ b/docs/user-manual/optimization/inspector-performance.md
@@ -0,0 +1,131 @@
+---
+title: Inspector Performance
+description: Record the frames of a running application on the Inspector's Performance tab - frame, CPU, GPU and script times, loading and the start of the application, the app's counters - and step through each frame on its timeline.
+---
+
+The Performance tab of the [Inspector](/user-manual/debugging/inspector/) records the frames of a running application and charts them over time, to find the frames that are slow and see what held them back. Where [MiniStats](/user-manual/optimization/mini-stats/) shows recent averages while you use the application, the Performance tab keeps every frame of a capture, up to the last 1000, to compare frames and step through them one by one.
+
+
+
+## Recording
+
+Press the record button, a ring around a dot, to record every frame. It shows red while recording, and pressing it again stops. The button beside it clears the capture.
+
+The charts cover the whole capture along its time: each frame is as wide as it lasted, so slow frames take the room they took, and a pause longer than a second, such as between two recordings, folds to a break mark labelled with its length. From the top:
+
+| Chart | Shows |
+|-------|-------|
+| **Frame** | The frame interval. |
+| **CPU** | The time of the main thread, by phase: the update of the systems, the physics, the scripts, the animation, the post-update, the render and the Inspector's own time. |
+| **GPU** | The GPU time of the frame, with **GPU timings** turned on. |
+| **Draw calls** | The draw calls, by kind where the engine counts them. |
+| **Scripts** | The time of each script type, with **Script timing** turned on. See [Script Timing](#script-timing). |
+| **Counters** | The counters the application keeps in `app.stats.user`. See [Counters](#counters). |
+| **Loading** | The milestones of the page and the application, the assets loading and the requests in flight. See [Loading](#loading). |
+| **Memory** | The JavaScript heap, the video memory and each kind of it, as lines sharing a scale. |
+| **Resources** | The count of textures, render targets, shaders, buffers and, on WebGPU, pipelines. |
+| **Events** | A row for each kind of event, marking the frames that had one. See [Events](#events). |
+
+A dashed line marks the display interval on the Frame, CPU and GPU charts. Hover a chart for the figures of the frame under the pointer, and a mark for what happened. Click the name of a chart or a section to collapse it, and untick a line in the list beside a chart to hide it; the chart then rescales to the others. Drag the divider between the names and the charts to make the names wider.
+
+To look at part of the capture:
+
+- Click a frame to show it on the [frame timeline](#the-frame-timeline), with everything recorded for it in the property view below.
+- Drag across the charts to select frames together, with their averages, 95th percentiles and largest figures. The timeline then shows their average frame.
+- Scroll over the charts to zoom, then drag the scrollbar under them, or drag across them holding Shift, to pan. Double-click to see the whole capture again.
+- **â¹** and **âº** step a frame, **«** shows the first and **»** the newest, following it as frames are recorded. While the panel has focus, the arrow keys step a frame (ten with Shift), Home shows the first and End follows the newest.
+
+### Events
+
+| Event | Marks |
+|-------|-------|
+| **Hitches** | Frames that took over twice as long as the median frame, whatever held them back: the frames the user sees stutter. |
+| **Thread blocked** | Frames in which the browser's main thread was busy for 50 milliseconds or more, with the script that ran longest, as Chromium browsers report them. It tells why a frame was slow: a hitch without it was held back by the GPU, the browser or the display, which the hover of the hitch says. |
+| **Lightmaps** | Lightmaps the application baked with the lightmapper, for an application with one. |
+| **Shaders** | Shaders compiled or created, and render pipelines created. |
+| **Heap shrank** | The JavaScript heap shrinking: a garbage collection. |
+| **Resources** | Textures, render targets or buffers created or destroyed. |
+| **Measures** | Spans the application measures with `performance.measure`. |
+
+## The Frame Timeline
+
+The timeline under the charts shows the frame selected along its own time, as a flame chart.
+
+
+
+- The **CPU** line holds the update, the post-update, the Inspector and the render, and the lightmap bakes where they ran. The lines below break them down: the physics step and the animation, the render phases, and with [Script Timing](#script-timing) the scripts of the update and the post-update with a line breaking them down by script type.
+- The **GPU** line holds the effects, such as bloom or depth of field, with the passes each runs below it, and the passes of their own. See [GPU Timings](#gpu-timings).
+- The **Events** line holds the long tasks of the main thread and the spans measured with `performance.measure`, and the lines below it the milestones, the assets and the requests of the frame.
+
+Hover a bar for its time, or a line for everything on it. Click a script type to show it on the Scripts tab, a pass or an effect to show it on the Frame graph tab, and an asset to show it on the Assets tab. Scroll over the timeline to zoom into part of the frame, drag the scrollbar under it or drag across it holding Shift to pan, and double-click it to see the whole frame again. Click its title to collapse it.
+
+The property view below lists everything recorded for the frame: what held it back, the CPU time by phase, the GPU time of each pass, the scripts, the counters, what loaded, the work it submitted, memory and resources, and its events.
+
+## GPU Timings
+
+Turn on **GPU timings** to record the time of the GPU. On WebGPU each pass is timed, and the effect of a pass comes from the frame graph, as the pass it runs for; where the frame graph no longer matches the passes timed, every pass goes on the GPU line. Passes of one name in a row share a label, as Downsample Ã5, and the frame details list the time of each. WebGL times the frame as a whole.
+
+## Script Timing
+
+Turn on **Script timing** to time each script type while recording: the time of its `update`, `postUpdate` and `initialize` calls, without the calls nested in them, and how many times each was called. The CPU chart then shows the scripts apart from the other systems, and the timeline draws them where they ran.
+
+The **Scripts** chart stacks the ten script types that took the longest, over the frames selected together or else the whole capture, so selecting a spike brings forward the scripts behind it. The others share one band, whose hover lists them. **âž 10 more** under the list gives ten more types a band of their own. To follow a script whatever its time, pin it: **Pin** beside it in the frame details, or Shift+click it in the list. Alt+click a line of a list to show it alone, and again to show them all.
+
+Timing a call costs the application about half a microsecond, counted as the Inspector's time. Time spent in event handlers, timers and promises is not counted. On a page that is not cross-origin isolated, the browser's clock steps by a tenth of a millisecond, so the times of small scripts read best over many frames selected together.
+
+## Loading
+
+The **Loading** section shares the time of the charts:
+
+- **Milestones** marks the moments of the page and the application: the page arriving, the DOM being ready, the first paints, the preload, the application starting and its first frame.
+- **Assets** draws each asset loading, from asking for it to its resource being ready: the request of its file solid and the processing after it, such as parsing, faint. The color is the kind of asset, with a key in the tooltip of the row's name, and failures are red.
+- **Requests** charts how many requests of the page were in flight.
+
+Hover the section for what was loading, and click an asset to show it on the Assets tab.
+
+## Recording the Start of the Application {#recording-the-start-of-the-application}
+
+To record from the first frame the application runs, pass `record: true` to the Inspector, or set the `record` attribute of the `EntityInspector` script. Created before the application runs its first frame, as right after `app.init()`, the Inspector records the start of the application too:
+
+```javascript
+const app = new AppBase(canvas);
+app.init(createOptions);
+
+// recording before the first frame records the start of the application too
+const inspector = new Inspector(app, { record: true });
+
+app.start();
+```
+
+The capture then begins with a **Startup** entry, from the page opening to the first frame, with the requests of the page, its milestones, the assets loaded and the times its main thread was blocked. Its details list how long it took, what loaded, the shader compiles, and the slowest assets with their request and processing apart. It is one of the 1000 entries of the capture, so it makes way for frames like any other.
+
+
+
+From code, set `inspector.recording` to start or stop a capture around a part of the application:
+
+```javascript
+// once the part to look at has run
+inspector.recording = false;
+```
+
+## Counters
+
+The **Counters** section charts the counters the application keeps in [`app.stats.user`](https://api.playcanvas.com/engine/classes/AppStats.html#user), as each frame ended: a line each, with a scale of its own, as their units are the application's. The frame details list their values, and the frames selected together their averages, 95th percentiles and largest. See [Profiling with AppStats](/user-manual/optimization/app-stats/) for the counters themselves:
+
+```javascript
+// counted afresh each frame
+app.on('frameupdate', () => app.stats.user.set('enemies', 0));
+
+// wherever the application counts them
+app.stats.user.set('enemies', app.stats.user.get('enemies') + 1);
+```
+
+## Engine Builds
+
+The release build of the engine times the update and the render as a whole. The profiler and debug builds add the phases of the render, the batcher's updating and creating of batches among them, the breakdown of the draw calls, the shader compiles and the lightmap bakes.
+
+The Inspector runs inside the application's update, so its own time is shown apart, as Inspector. Turn off **Inspector time** to leave it out of the CPU chart, which then scales to the application's own time.
+
+## Copying the Figures
+
+Right-click the name of the tab to copy the whole capture, every frame with all it recorded, or the name of a chart or a section, or a line of its list, to copy that series a row per frame, as JSON or as CSV for a spreadsheet. Both cover the frames selected together when there are any. Right-click a frame in the charts to copy it, inside the frames selected together to copy their figures, and the timeline to copy its bars.
diff --git a/docs/user-manual/scripting/index.md b/docs/user-manual/scripting/index.md
index 579ab89a266..90210d42cba 100644
--- a/docs/user-manual/scripting/index.md
+++ b/docs/user-manual/scripting/index.md
@@ -68,5 +68,5 @@ Rotate.prototype.update = function(dt) {
- [Script Attributes](./script-attributes/index.md) â Exposing configurable properties.
- [Engine API](./engine-api.md) â Key classes and patterns.
- [Events](./events.md) â Communication between scripts.
-- [Debugging](./debugging/index.md) â Tools and techniques for troubleshooting.
+- [Debugging](/user-manual/debugging/) â Tools and techniques for troubleshooting.
- [Migration Guide](./migration-guide.md) â Upgrading from classic to ESM scripts.
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 3480685fb4b..44e1892f8fd 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -68,6 +68,11 @@ const config = {
plugins: [
[ '@docusaurus/plugin-client-redirects', {
redirects: [
+ // Debugging moved out of Scripting into Debugging and Optimization
+ { from: ['/user-manual/scripting/debugging/'], to: '/user-manual/debugging/' },
+ { from: ['/user-manual/scripting/debugging/console-logging/'], to: '/user-manual/debugging/console-logging/' },
+ { from: ['/user-manual/scripting/debugging/browser-dev-tools/'], to: '/user-manual/debugging/browser-dev-tools/' },
+ { from: ['/user-manual/scripting/debugging/inspector/'], to: '/user-manual/debugging/inspector/' },
{ from: ['/api', '/en/api'], to: 'https://api.playcanvas.com' },
// Retired Facebook docs (the Facebook Canvas web games platform was discontinued)
{ from: ['/tutorials/facebook-api/'], to: '/tutorials/' },
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current.json b/i18n/ja/docusaurus-plugin-content-docs/current.json
index 9e0454daee1..03acb60a036 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current.json
+++ b/i18n/ja/docusaurus-plugin-content-docs/current.json
@@ -19,6 +19,14 @@
"message": "2D",
"description": "The label for category 2D in sidebar userManualSidebar"
},
+ "sidebar.userManualSidebar.category.Debugging and Optimization": {
+ "message": "ãããã°ãšæé©å",
+ "description": "The label for category Debugging and Optimization in sidebar userManualSidebar"
+ },
+ "sidebar.userManualSidebar.category.Profiling": {
+ "message": "ãããã¡ã€ãªã³ã°",
+ "description": "The label for category Profiling in sidebar userManualSidebar"
+ },
"sidebar.userManualSidebar.category.Optimization": {
"message": "æé©å",
"description": "The label for category Optimization in sidebar userManualSidebar"
@@ -199,6 +207,10 @@
"message": "ã¹ã¯ãªãã屿§",
"description": "The label for category Script Attributes in sidebar userManualSidebar"
},
+ "sidebar.userManualSidebar.doc.Debugging": {
+ "message": "ãããã°",
+ "description": "The label for the doc item Debugging in sidebar userManualSidebar, linking to the doc user-manual/debugging/index"
+ },
"sidebar.userManualSidebar.category.Debugging": {
"message": "ãããã°",
"description": "The label for category Debugging in sidebar userManualSidebar"
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/browser-dev-tools.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/browser-dev-tools.md
similarity index 96%
rename from i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/browser-dev-tools.md
rename to i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/browser-dev-tools.md
index e24e8898c83..688089084ea 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/browser-dev-tools.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/browser-dev-tools.md
@@ -11,11 +11,11 @@ ChromeãFirefoxãä»ã®ãã©ãŠã¶ã§ã¯ããã©ãŠã¶ã«çŽæ¥çµã¿èŸŒãŸ
ã¹ã¯ãªããããããã°ããããã«ã¯ãDeveloper Tools (Chrome)ã§Sourcesã¿ããéžæããŸããSourcesãã€ã³ã®å·Šäžé
ã«ããã¢ã€ã³ã³ãã¯ãªãã¯ã㊠'navigator' ãéããŸãã以äžã®ãããªãã®ã衚瀺ãããã¯ãã§ãïŒ
-
+
Firefoxã§ã¯æ¬¡ã®ããã«ãªããŸãïŒ
-
+
ããã²ãŒã¿ã«ã¯ãèªèº«ã§æžããPlayCanvasã¹ã¯ãªãããå«ããçŸåšã¢ã¯ãã£ããªã¿ãã§å®è¡ããŠããå
šãŠã®ã¹ã¯ãªããããªã¹ããããŸããããã²ãŒã¿ãŒããã¹ã¯ãªãããæ¢ããéžæãããšãœãŒã¹ã³ãŒããéããŸããããã§ããã¬ã€ã¯ãã€ã³ããèšå®ããŠãããã°ãè¡ããŸãã
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/console-logging.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/console-logging.md
similarity index 100%
rename from i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/console-logging.md
rename to i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/console-logging.md
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/index.md
new file mode 100644
index 00000000000..0a852c688a2
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/index.md
@@ -0,0 +1,32 @@
+---
+title: ãããã°
+description: ãã®ã³ã°ããã©ãŠã¶ã®éçºè
ããŒã«ãInspectorããããã°æç»ã䜿ã£ãŠ PlayCanvas ã¢ããªã±ãŒã·ã§ã³ã®ãã°ãèŠã€ãä¿®æ£ããããŒã«ãšææ³ã§ãã
+---
+
+ãããã°ã¯ãPlayCanvasã¢ããªã±ãŒã·ã§ã³ã®åé¡ããã¹ã¯ãªããã ãã§ãªãã¬ã³ããªã³ã°ãããŒãããããã®ãå«ããŠç¹å®ããä¿®æ£ããããã«äžå¯æ¬ ã§ããæåŸ
éãã«åäœããªãå Žåããããã®ããŒã«ãšãã¯ããã¯ã¯åé¡ãè¿
éã«èŠã€ããŠè§£æ±ºããã®ã«åœ¹ç«ã¡ãŸããåäœãé
ãçç±ã調ã¹ãã«ã¯ã[䜿ãããŒã«](/user-manual/optimization/#which-tool-to-use)ãåç
§ããŠãã ããã
+
+## ãããã°ãã¯ããã¯
+
+### ã³ã³ãœãŒã«ãã®ã³ã°
+
+ã³ãŒããäœãããŠããããçè§£ããæãæè»œãªæ¹æ³ã§ããå®è¡ãããŒã远跡ãã倿°ã®å€ãæ€æ»ããããã«`console.log()`ã¹ããŒãã¡ã³ãã远å ããŸãã
+
+**[ã³ã³ãœãŒã«ãã®ã³ã°ãåŠã¶ â](./console-logging.md)**
+
+### ãã©ãŠã¶éçºè
ããŒã«
+
+ãã¬ãŒã¯ãã€ã³ããã¹ãããã¹ã«ãŒãããã°ãããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ã䜿çšããŠãå®è¡äžã®ã³ãŒããè©³çŽ°ã«æ€æ»ããŸãã
+
+**[ãã©ãŠã¶éçºè
ããŒã«ãåŠã¶ â](./browser-dev-tools.md)**
+
+### Inspector
+
+å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®å
éšã確èªããŸãããšã³ãã£ãã£ãšã³ã³ããŒãã³ããã«ã¡ã©ãã¢ã»ãããGPUãªãœãŒã¹ãåãã¬ãŒã ã®ãã¹ããããŠãã¹ã®æç»ã1ã€ãã€ç¢ºèªã§ããŸãã
+
+**[InspectorãåŠã¶ â](./inspector.md)**
+
+### ãããã°æç»
+
+ã·ãŒã³ã®äžã«ç·ã圢ç¶ããã¯ã¹ãã£ãæç»ããŠãããŠã³ãã£ã³ã°ãæ¹åãã¬ã³ããŒã¿ãŒã²ããã®å
容ãã·ãŒã³ã®æ·±åºŠãªã©ãã³ãŒããèšç®ãããã®ã確èªããŸãã
+
+**[ãããã°æç»ãåŠã¶ â](/user-manual/graphics/debug-drawing/)**
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/inspector.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/inspector.md
similarity index 90%
rename from i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/inspector.md
rename to i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/inspector.md
index db2b8b4d68b..882b9ddccfa 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/inspector.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/debugging/inspector.md
@@ -1,11 +1,11 @@
---
title: Inspector
-description: å®è¡äžã® PlayCanvas ã¢ããªã±ãŒã·ã§ã³ããããã°ããã«ã§èª¿ã¹ãŸãããšã³ãã£ãã£ãã«ã¡ã©ãã¢ã»ããããã¬ãŒã ã°ã©ããGPU ãªãœãŒã¹ãScriptãã·ã§ãŒããŒã確èªãããã¬ãŒã ã®æç»ã1ã€ãã€é²ããããŸãã
+description: å®è¡äžã® PlayCanvas ã¢ããªã±ãŒã·ã§ã³ããããã°ããã«ã§èª¿ã¹ãŸãããšã³ãã£ãã£ãã«ã¡ã©ãã¢ã»ããããã¬ãŒã ã°ã©ããGPU ãªãœãŒã¹ãScriptãã·ã§ãŒããŒã確èªãããã¬ãŒã ã®æç»ã1ã€ãã€é²ããããã©ãŒãã³ã¹ãèšé²ã§ããŸãã
---
Inspectorã¯ãå®è¡äžã®PlayCanvasã¢ããªã±ãŒã·ã§ã³çšã®ãããã°ããã«ã§ãããã£ã³ãã¹ã®æšªã«ãããã³ã°ããã¢ããªã±ãŒã·ã§ã³ã®ã·ãŒã³ãGPUãªãœãŒã¹ãæç»ããããã¬ãŒã ãçŸåšã®ç¶æ
ã§è¡šç€ºããŸããéžæãããã®ã®ããããã£ã¯ãäžã®ãã¥ãŒã§ãªã¢ã«ã¿ã€ã ã«æŽæ°ãããŸãã
-
+
次ã®ãããªçåã解決ããã®ã«åœ¹ç«ã¡ãŸãã
@@ -13,6 +13,7 @@ Inspectorã¯ãå®è¡äžã®PlayCanvasã¢ããªã±ãŒã·ã§ã³çšã®ãããã°
- ã¡ãã·ã¥ã¯ã©ã®ãããªã¢ã«ãšã·ã§ãŒããŒã§æç»ãããã©ã®ãã¯ã¹ãã£ã䜿ã£ãŠãããã
- ãã¬ãŒã ã¯äœããã©ã®ãã¹ã§ãã©ã®é åºã§æç»ããŠãããã
- ãããªã¡ã¢ãªã¯ã©ãã§äœ¿ãããŠãããã
+- ã©ã®ãã¬ãŒã ãé
ããäœããããé
ãããŠãããã
Inspectorã¯ã¢ããªã±ãŒã·ã§ã³ãèªã¿åãã ãã§ãã倿Žãå ããã®ã¯ããŠãŒã¶ãŒãæç€ºããå Žåã«éãããŸãããšã³ãã£ãã£ã®ãªã³ã»ãªããã¢ããªã±ãŒã·ã§ã³ã®äžæåæ¢ãšã³ãéãããããŠè¡šç€ºã ãã«é¢ããäžæžãïŒã¬ã³ããŒã¢ãŒããã¯ã€ã€ãŒãã¬ãŒã ãé£è¡ãŸãã¯ãªãŒãããããã«ã¡ã©ïŒã§ãããããã¯Inspectorãéãããšå
ã«æ»ããŸãã
@@ -56,6 +57,7 @@ app.root.addChild(entity);
| `toggleKey` | `` 'Backquote' `` | ããã«ã®è¡šç€ºã»é衚瀺ãåãæ¿ããããŒã |
| `pauseKey` | `'F9'` | ã¢ããªã±ãŒã·ã§ã³ãäžæåæ¢ã»åéããããŒã |
| `stepKey` | `'F10'` | äžæåæ¢äžã«1ãã¬ãŒã é²ããããŒã |
+| `record` | `false` | Performance ã¿ãã§ãã¬ãŒã ã®èšé²ãéå§ãããã©ãããã¢ããªã±ãŒã·ã§ã³ã®æåã®ãã¬ãŒã ããåã«äœæãããšãInspector ã¯ãã®èµ·åãèšé²ããŸãã[ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã®èšé²](/user-manual/optimization/inspector-performance/#recording-the-start-of-the-application)ãåç
§ããŠãã ããã |
| `storageKey` | `'pc-inspector'` | ã¢ã¯ãã£ããªã¿ããããã«ã®å¹
ãªã©ãããã«ã®èšå®ãä¿åããããŒã«ã«ã¹ãã¬ãŒãžã®ããŒã`null`ã®å Žåã¯äœãä¿åããŸããã |
## ããŒã«ã㌠{#the-toolbar}
@@ -82,6 +84,7 @@ EscããŒã§ãããã¯ãé£è¡ããªãŒããããçµäºããŸãã
| **Cameras** | æç»é ã®ã«ã¡ã©ãšãããããã®æç»å
ãã¬ã³ããŒã¢ãŒãã䜿ããšãæçµçãªç»åã®ä»£ããã«ã¢ã«ãããã¯ãŒã«ãæ³ç·ãã©ã€ãã£ã³ã°ãªã©ã®ã·ãŒã³ã®ãããªã¢ã«å
¥åãã1ã€ã®ã«ã¡ã©ãŸãã¯ãã¹ãŠã®ã«ã¡ã©ã§è¡šç€ºã§ããŸããã·ãŒã³ãã¯ã€ã€ãŒãã¬ãŒã ã§æç»ããããšãã§ããŸãã |
| **Assets** | ã¬ãžã¹ããªå
ã®ãã¹ãŠã®ã¢ã»ãããšããã®ãã¡ã€ã«ãèªã¿èŸŒã¿ç¶æ
ã䜿çšç®æã |
| **Frame graph** | çŽåã®ãã¬ãŒã ãæç»ãããã¹ãé ã«è¡šç€ºããããããã®ã¬ã€ã€ãŒãæç»ãã¬ã³ããŒã¿ãŒã²ããã瀺ããŸãã**GPU timings**ã¯ããã€ã¹ãèšæž¬ã§ããå Žåã«åãã¹ã®GPUæéã衚瀺ãã**Freeze**ã¯ã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžãçŸåšã®ãã¬ãŒã ã衚瀺ãç¶ãã**Preview**ã¯éžæãããã¹ã®ã¬ã³ããŒã¿ãŒã²ããããã¥ãŒã®äžã«æç»ããŸãã |
+| **Performance** | ã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ãèšé²ãããã¬ãŒã ãCPUãGPUãã¹ã¯ãªããã®æéãããŒãããããã®ãã¡ã¢ãªããªãœãŒã¹ãæéã«æ²¿ã£ãŠãã£ãŒã衚瀺ããåãã¬ãŒã ãç¬èªã®ã¿ã€ã ã©ã€ã³ã§è¡šç€ºããŸãã[Inspector ã®ããã©ãŒãã³ã¹](/user-manual/optimization/inspector-performance/)ãåç
§ããŠãã ããã |
| **Render targets** | ããã€ã¹äžã®ã¬ã³ããŒã¿ãŒã²ãããšãããã«æç»ãããã¹ãéžæããã¢ã¿ããã¡ã³ãã®ã©ã€ããã¬ãã¥ãŒã |
| **Textures** | ããã€ã¹äžã®ãã¯ã¹ãã£ã倧ããé ã«è¡šç€ºããã©ã€ããã¬ãã¥ãŒãšè¡šç€ºãããã£ã³ãã«ã®éžæãæäŸããŸãã |
| **Meshes** | ã¢ããªã±ãŒã·ã§ã³ã®ã¡ãã·ã¥ã倧ããé ã«è¡šç€ºãããã®ãžãªã¡ããªãšäœ¿çšç®æã瀺ããŸãã |
@@ -91,7 +94,7 @@ EscããŒã§ãããã¯ãé£è¡ããªãŒããããçµäºããŸãã
| **Shaders** | ã³ã³ãã€ã«æžã¿ã®ã·ã§ãŒããŒãšãã®ãœãŒã¹ã |
| **Physics** | ç©çã¯ãŒã«ãã®åäœãšãžã§ã€ã³ãããããŠã¯ãŒã«ããã·ãŒã³ã®äžã«æç»ãããªãã·ã§ã³ã |
-
+
## ãã¬ãŒã ã®ã¹ãããå®è¡ {#stepping-through-a-frame}
@@ -102,7 +105,7 @@ Frame graphã¿ãã§ã¯ããã¬ãŒã ããããŒã³ãŒã«1ã€ãã€æç»ã§
3. äžäžã®ç¢å°ããŒã§ãæç»ã1ã€ãã€æ»ã£ããé²ãããããŸããããããã£ãã¥ãŒã«ã¯æç»ãããã¡ãã·ã¥ã€ã³ã¹ã¿ã³ã¹ãäžèŠ§è¡šç€ºãããçŸåšã®ãã®ã匷調衚瀺ãããŸãããã¥ãŒã§ã¯ãã®èŒªéã衚瀺ãããã¹ããŒã¿ã¹ããŒã«ã¯*draw 8 of 12 · World opaque*ã®ããã«ãã®çªå·ã衚瀺ãããŸããé
ç®ãå±éãããšãã¡ãã·ã¥ããããªã¢ã«ãªã©ã®è©³çްã確èªã§ããŸãã
4. **Debug frame**ããªãã«ãããšãåã³ãã¬ãŒã å
šäœãæç»ãããŸãã
-
+
:::note
æç»ã®ã¹ãããå®è¡ã«ã¯ãšã³ãžã³ã®ãããã°ãã«ããå¿
èŠã§ãä»ã®ãã«ãã§ã¯ãã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªããŸããViteãªã©ã®ãã³ãã©ãŒã¯ãéçºæã«`playcanvas`ããã±ãŒãžã®`development`ãšã¯ã¹ããŒãæ¡ä»¶ã«ãã£ãŠãããã°ãã«ããéžæããŸãã
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/migrating-from-unity.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/migrating-from-unity.md
index 926ca30ee88..7d4710f755f 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/migrating-from-unity.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/migrating-from-unity.md
@@ -52,7 +52,7 @@ Unityã¯ã²ãŒã ããšãã£ã¿ãŒã®äžã§åçããŸããPlayCanvasã¯æ°
ã¹ã¯ãªããããšãã£ã¿ãŒã®ãã¥ãŒããŒãã§å®è¡ãããããšã¯ãªããããUnityã®`[ExecuteInEditMode]`ã«çžåœãããã®ã¯ãããŸãããã¹ã¯ãªãããäœæããã倿Žããããããã®ã¯ãèµ·åããã¢ããªã«ããçŸããŸããã
-Launchãã¿ã³ã®ã¡ãã¥ãŒã«ã¯ããã¹ãçšã®ãªãã·ã§ã³ããããŸããã°ã©ãã£ãã¯ã¹APIãéžãã ãã[ãããã¡ã€ã©ãŒ](/user-manual/optimization/profiler/)ã[MiniStats](/user-manual/optimization/mini-stats/)ã[Inspector](/user-manual/scripting/debugging/inspector/)ãéãããã§ããŸãã**Debug** ã«ãã§ãã¯ãå
¥ãããšããšã³ãžã³ã®èŠåãšãšã©ãŒãã³ã³ãœãŒã«ã«èšé²ãããŸãã
+Launchãã¿ã³ã®ã¡ãã¥ãŒã«ã¯ããã¹ãçšã®ãªãã·ã§ã³ããããŸããã°ã©ãã£ãã¯ã¹APIãéžãã ãã[ãããã¡ã€ã©ãŒ](/user-manual/optimization/profiler/)ã[MiniStats](/user-manual/optimization/mini-stats/)ã[Inspector](/user-manual/debugging/inspector/)ãéãããã§ããŸãã**Debug** ã«ãã§ãã¯ãå
¥ãããšããšã³ãžã³ã®èŠåãšãšã©ãŒãã³ã³ãœãŒã«ã«èšé²ãããŸãã
### ãã¥ãŒããŒãã®æäœ {#navigating-the-viewport}
@@ -641,11 +641,11 @@ Unityã¯ãã©ãããã©ãŒã ããšã«ãã¬ã€ã€ãŒããã«ãããŸãã
| Unity | PlayCanvas |
| --- | --- |
-| ConsoleãŠã£ã³ã㊠| éçºè
ããŒã«ã® **Console** ã¿ãã[ã³ã³ãœãŒã«ãã®ã³ã°](/user-manual/scripting/debugging/console-logging/)ãåç
§ããŠãã ããã |
-| Visual StudioãRiderã®ã¢ã¿ãã | éçºè
ããŒã«ã® **Sources** ã¿ãã§èšå®ãããã¬ãŒã¯ãã€ã³ãã[ãã©ãŠã¶éçºããŒã«](/user-manual/scripting/debugging/browser-dev-tools/)ãåç
§ããŠãã ããã |
+| ConsoleãŠã£ã³ã㊠| éçºè
ããŒã«ã® **Console** ã¿ãã[ã³ã³ãœãŒã«ãã®ã³ã°](/user-manual/debugging/console-logging/)ãåç
§ããŠãã ããã |
+| Visual StudioãRiderã®ã¢ã¿ãã | éçºè
ããŒã«ã® **Sources** ã¿ãã§èšå®ãããã¬ãŒã¯ãã€ã³ãã[ãã©ãŠã¶éçºããŒã«](/user-manual/debugging/browser-dev-tools/)ãåç
§ããŠãã ããã |
| `Debug.Break()` | éçºè
ããŒã«ãéããŠãããšãã«ã¢ããªãäžæåæ¢ãã`debugger;`æ |
| Profiler | Launchãã¿ã³ã®ã¡ãã¥ãŒãã䜿ã[ãããã¡ã€ã©ãŒ](/user-manual/optimization/profiler/)ãš[MiniStats](/user-manual/optimization/mini-stats/)ãããã³éçºè
ããŒã«ã® **Performance** ã¿ã |
-| Frame Debugger | åããLaunchãã¿ã³ã®ã¡ãã¥ãŒãã䜿ããåãã¬ãŒã ã®ã¬ã³ããŒãã¹ãšãããŒã³ãŒã«ã衚瀺ãã[Inspector](/user-manual/scripting/debugging/inspector/)ãšã[ãã€ãã£ãã®GPUãããã¡ã€ã©ãŒ](/user-manual/optimization/gpu-profiling/) |
+| Frame Debugger | åããLaunchãã¿ã³ã®ã¡ãã¥ãŒãã䜿ããåãã¬ãŒã ã®ã¬ã³ããŒãã¹ãšãããŒã³ãŒã«ã衚瀺ãã[Inspector](/user-manual/debugging/inspector/)ãšã[ãã€ãã£ãã®GPUãããã¡ã€ã©ãŒ](/user-manual/optimization/gpu-profiling/) |
| `Debug.DrawLine`ãšGizmos | `this.app.drawLine()`ãšãçãããã¯ã¹ãªã©ã®åœ¢ç¶ãæã[`WireRenderer`](/user-manual/graphics/debug-drawing/) |
## ããŒãžã§ã³ç®¡çãšã³ã©ãã¬ãŒã·ã§ã³ {#version-control-and-collaboration}
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/start-with-create-playcanvas.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/start-with-create-playcanvas.md
index 5143a33b089..dae629507ee 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/start-with-create-playcanvas.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/getting-started/start-with-create-playcanvas.md
@@ -85,7 +85,7 @@ Editorã®ãããžã§ã¯ããWeb LensãšããŠå
¬éããå Žåã¯ã[Snapchat
## Inspectorã§ãããã°ãã
-éçºãµãŒããŒã¯ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³çšã«[Inspector](/user-manual/scripting/debugging/inspector/)ãèªã¿èŸŒã¿ãŸããããã¯ã¯ã©ãŒãããŒïŒ`` ` ``ïŒã§è¡šç€ºãšé衚瀺ãåãæ¿ããF9ã§äžæåæ¢ããF10ã§1ãã¬ãŒã ãã€é²ããŸããInspectorã¯ãããã¯ã·ã§ã³ãã«ãã«ã¯å«ãŸããŸããã
+éçºãµãŒããŒã¯ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³çšã«[Inspector](/user-manual/debugging/inspector/)ãèªã¿èŸŒã¿ãŸããããã¯ã¯ã©ãŒãããŒïŒ`` ` ``ïŒã§è¡šç€ºãšé衚瀺ãåãæ¿ããF9ã§äžæåæ¢ããF10ã§1ãã¬ãŒã ãã€é²ããŸããInspectorã¯ãããã¯ã·ã§ã³ãã«ãã«ã¯å«ãŸããŸããã
## ããã³ãããçç¥ãã
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/index.md
index b5189bf6e9c..e741d3397c4 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/index.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/index.md
@@ -1,8 +1,26 @@
---
-title: æé©å
-description: PlayCanvas ã¢ããªã±ãŒã·ã§ã³ã§ããŒãæéããã¬ãŒã ã¬ãŒããCPUãGPU è² è·ãã¡ã¢ãªãæé©åããçç±ã𿹿³ã§ãã
+title: ãããã°ãšæé©å
+description: PlayCanvas ã¢ããªã±ãŒã·ã§ã³ã®ãã°ãããã©ãŒãã³ã¹ã®åé¡ãèŠã€ããããŒã«ãšãããŒãæéããã¬ãŒã ã¬ãŒããCPU ãš GPU ã®è² è·ãã¡ã¢ãªãæé©åããçç±ã𿹿³ã§ãã
---
+ãã®ã»ã¯ã·ã§ã³ã§ã¯ãå®è¡äžã® PlayCanvas ã¢ããªã±ãŒã·ã§ã³ã®å
éšã調ã¹ãæåŸ
ã©ããã«åäœããªãçç±ããæåŸ
ã©ããã®ããã©ãŒãã³ã¹ãåºãªãçç±ãèŠã€ããããŒã«ãšãã¢ããªã±ãŒã·ã§ã³ã®ããŒããšå®è¡ãéãããæ¹æ³ã説æããŸãã
+
+## 䜿ãããŒã« {#which-tool-to-use}
+
+| 調ã¹ããããš | 䜿ããã® |
+| ------------ | -------- |
+| ã³ãŒããäœãããŠããŠãã©ãã§åé¡ãèµ·ããŠããã | [ã³ã³ãœãŒã«ãã®ã³ã°](/user-manual/debugging/console-logging/)ãš[ãã©ãŠã¶éçºè
ããŒã«](/user-manual/debugging/browser-dev-tools/) |
+| ã¢ããªã±ãŒã·ã§ã³ã®äžèº«ïŒãšã³ãã£ãã£ãšã³ã³ããŒãã³ããã«ã¡ã©ãã¢ã»ãããGPU ãªãœãŒã¹ | [Inspector](/user-manual/debugging/inspector/) |
+| ãã¬ãŒã ããã¹ããšãæç»ããšã«ã©ãã¬ã³ããªã³ã°ãããã | [Inspector](/user-manual/debugging/inspector/) ã® Frame graph ã¿ããšã[ãã¬ãŒã ã®ã¹ãããå®è¡](/user-manual/debugging/inspector/#stepping-through-a-frame) |
+| ã³ãŒããã·ãŒã³å
ã§èšç®ãããã®ïŒããŠã³ãã£ã³ã°ãæ¹åãã¬ã³ããŒã¿ãŒã²ããã®å
容ãªã©ïŒ | [ãããã°æç»](/user-manual/graphics/debug-drawing/) |
+| æäœäžã«ã¢ããªã±ãŒã·ã§ã³ããã¬ãŒã ã¬ãŒããä¿ãŠãŠããã | [MiniStats](/user-manual/optimization/mini-stats/) |
+| ã©ã®ãã¬ãŒã ãé
ããäœããããé
ãããŠãããïŒCPUãGPUãã¹ã¯ãªãããããŒã | [Inspector ã® Performance ã¿ã](/user-manual/optimization/inspector-performance/) |
+| ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã«ãããæéãšãäœããã€ããŒããããã | [Inspector ã® Performance ã¿ã](/user-manual/optimization/inspector-performance/#recording-the-start-of-the-application)ããŸã㯠[Editor Profiler](/user-manual/optimization/profiler/) |
+| ããã·ã¥ããŒããèªåæ¯èŒã®ããã®ãã³ãŒãããã®ãšã³ãžã³ã®çµ±èš | [AppStatsã«ãããããã¡ã€ãªã³ã°](/user-manual/optimization/app-stats/) |
+| ãã¬ãŒã å
ã§ GPU ãè¡ãåŠçã®è©³çް | ãã€ãã£ã GPU ããŒã«ã«ãã [GPUãããã¡ã€ãªã³ã°](/user-manual/optimization/gpu-profiling/) |
+
+## æé©å {#optimization}
+
æé©åã¯ãPlayCanvasã¢ããªã±ãŒã·ã§ã³éçºã®éèŠãªéšåã§ããããã¯ãåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšã²ã©ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åããç®ãšãªãããšããããŸãã
:::tip
@@ -20,17 +38,9 @@ description: PlayCanvas ã¢ããªã±ãŒã·ã§ã³ã§ããŒãæéããã¬ãŒ
| ð CPUãšGPUã®è² è·ã®æå°å | ã¢ããªã1ç§éã«60ãã¬ãŒã ãç¶æããŠãããããšãã£ãŠãäœæ¥ãå®äºããããã§ã¯ãããŸãããããã»ããµãŒã®è² è·ãæžããããšã§ããããªãŒé»åãç¯çŽããããã€ã¹ãäœæž©ã«ä¿ã¡ãŸãã |
| ð§ ã¡ã¢ãªäœ¿çšéã®æå°å | ãã©ãŠã¶ã¯ã¢ããªã±ãŒã·ã§ã³ã«å²ãåœãŠãã¡ã¢ãªããŒã«ãå¶éããŠããŸãããã®ããŒã«ãæ¯æžãããšãã¿ããã¯ã©ãã·ã¥ããŠåããŒããããŸãããŠãŒã¶ãŒã¯äžæºã«æããã§ãããïŒ |
-## æé©åã®åã«æž¬å®ãã {#measure-before-optimizing}
-
-åçŸå¯èœãªã·ãŒã³ãæäœãéžã³ã察象ããã€ã¹ã§ããŒã¹ã©ã€ã³ãèšé²ããŠãããåãæ¡ä»¶ã§å倿Žã枬å®ããŸãã
+### æé©åã®åã«æž¬å®ãã {#measure-before-optimizing}
-| ããŒã« | çšé |
-| ------ | ---- |
-| [MiniStats](/user-manual/optimization/mini-stats/) | ã¢ããªã±ãŒã·ã§ã³ãæäœããªããããã¬ãŒã æéãCPU/GPUã³ã¹ããGPUãªãœãŒã¹ã¡ã¢ãªã芳å¯ããŸãã |
-| [AppStatsã«ãããããã¡ã€ãªã³ã°](/user-manual/optimization/app-stats/) | ã³ãŒãããå
¬éçµ±èšãèªã¿åããããã·ã¥ããŒãããšãŒãžã§ã³ããèªåæ¯èŒåãã®ã¬ããŒããåéããŸãã |
-| [Editor Profiler](/user-manual/optimization/profiler/) | ã¢ã»ããã®èªã¿èŸŒã¿ãã·ã§ãŒããŒã®ã³ã³ãã€ã«ã®ã¿ã€ã ã©ã€ã³ãªã©ããšãã£ã¿ãŒã®Launchãããã¡ã€ã©ãŒã確èªããŸãã |
-| [GPUãããã¡ã€ãªã³ã°](/user-manual/optimization/gpu-profiling/) | ãã€ãã£ãGPUããŒã«ã§ãã¬ãŒã ããã£ããã£ããã¬ã³ããªã³ã°ã詳ãã調æ»ããŸãã |
-| [Inspector](/user-manual/scripting/debugging/inspector/) | å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã§ããããªã¡ã¢ãªã®äœ¿ããæ¹ããã¬ãŒã ã®ãã¹ãšæç»ãåã¡ãã·ã¥ãšãããªã¢ã«ã䜿ããã®ã調ã¹ãŸãã |
+åçŸå¯èœãªã·ãŒã³ãæäœãéžã³ã察象ããã€ã¹ã§ããŒã¹ã©ã€ã³ãèšé²ããŠããã[䜿ãããŒã«](#which-tool-to-use)ã®ãããã¡ã€ãªã³ã°ããŒã«ã䜿ããåãæ¡ä»¶ã§å倿Žã枬å®ããŸããäœã倿Žãããã¯ã[ã¬ã€ãã©ã€ã³](/user-manual/optimization/guidelines/)ãšããã«ç¶ãããŒãžã§èª¬æããŠããŸãã
:::ai
AIã¢ã·ã¹ã¿ã³ãã«ç®æšãåçŸæé ã[**AppStats**](/user-manual/optimization/app-stats/#collecting-periodic-reports)ã®ããŒã¹ã©ã€ã³ã¬ããŒããæž¡ããšãMiniStatsããã©ãŠã¶ãŒã®çµæãšçµã¿åãããæž¬å®å¯èœãªå€æŽã1ã€ãã€ææ¡ã§ããŸããEditorã§ã¯[**Editor MCP Server**](/user-manual/editor/mcp-server/)ãã¹ã¿ã³ãã¢ãã³ã§ã¯[**AIãæŽ»çšããéçº**](/user-manual/engine/developing-with-ai/)ã䜿çšããŸãã
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/inspector-performance.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/inspector-performance.md
new file mode 100644
index 00000000000..c14649ecdd0
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/optimization/inspector-performance.md
@@ -0,0 +1,131 @@
+---
+title: Inspector ã®ããã©ãŒãã³ã¹
+description: Inspector ã® Performance ã¿ãã§ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ãèšé²ããŸãããã¬ãŒã ãCPUãGPUãã¹ã¯ãªããã®æéãããŒããšã¢ããªã±ãŒã·ã§ã³ã®èµ·åãã¢ããªã®ã«ãŠã³ã¿ãŒã確èªããåãã¬ãŒã ãã¿ã€ã ã©ã€ã³ã§1ã€ãã€ç¢ºèªã§ããŸãã
+---
+
+[Inspector](/user-manual/debugging/inspector/)ã® Performance ã¿ãã¯ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ãèšé²ããŠæéã«æ²¿ã£ãŠãã£ãŒã衚瀺ããé
ããã¬ãŒã ãèŠã€ããŠãäœããããé
ãããã®ãã確èªã§ããŸãã[MiniStats](/user-manual/optimization/mini-stats/)ãã¢ããªã±ãŒã·ã§ã³ã䜿ã£ãŠããéã®æè¿ã®å¹³åã衚瀺ããã®ã«å¯ŸããPerformance ã¿ãã¯ãã£ããã£ã®ãã¹ãŠã®ãã¬ãŒã ãææ°ã®1000ãã¬ãŒã ãŸã§ä¿æãããã¬ãŒã ãæ¯èŒããã1ã€ãã€ç¢ºèªãããã§ããŸãã
+
+
+
+## èšé² {#recording}
+
+èšé²ãã¿ã³ïŒç¹ãå²ããªã³ã°ïŒãæŒããšããã¹ãŠã®ãã¬ãŒã ãèšé²ããŸããèšé²äžã¯èµ€ã衚瀺ãããããäžåºŠæŒããšåæ¢ããŸãããã®é£ã®ãã¿ã³ã¯ãã£ããã£ãã¯ãªã¢ããŸãã
+
+ãã£ãŒãã¯ãã£ããã£å
šäœãæéã«æ²¿ã£ãŠè¡šç€ºããŸããåãã¬ãŒã ã¯ããã£ãæéã®åã®å¹
ãæã€ãããé
ããã¬ãŒã ã¯ããã ãã®å Žæãå ããŸãã2åã®èšé²ã®éã®ããã«1ç§ããé·ãééã¯ããã®é·ãã瀺ãåºåãããŒã¯ã«æããããŸããŸããäžããé ã«æ¬¡ã®ãšããã§ãã
+
+| ãã£ãŒã | 衚瀺å
容 |
+|-------|-------|
+| **Frame** | ãã¬ãŒã ééã |
+| **CPU** | ã¡ã€ã³ã¹ã¬ããã®æéããã§ãŒãºå¥ã«è¡šç€ºããŸããã·ã¹ãã ã®æŽæ°ãç©çãã¹ã¯ãªãããã¢ãã¡ãŒã·ã§ã³ããã¹ãã¢ããããŒããã¬ã³ããŒãInspector èªèº«ã®æéã§ãã |
+| **GPU** | **GPU timings** ããªã³ã«ãããšãã®ãã¬ãŒã ã® GPU æéã |
+| **Draw calls** | ãããŒã³ãŒã«ããšã³ãžã³ãçš®é¡å¥ã«æ°ããå Žåã¯çš®é¡å¥ã«è¡šç€ºããŸãã |
+| **Scripts** | **Script timing** ããªã³ã«ãããšãã®ãåã¹ã¯ãªããã¿ã€ãã®æéã[ã¹ã¯ãªããã®èšæž¬](#script-timing)ãåç
§ããŠãã ããã |
+| **Counters** | ã¢ããªã±ãŒã·ã§ã³ã `app.stats.user` ã«ä¿æããã«ãŠã³ã¿ãŒã[ã«ãŠã³ã¿ãŒ](#counters)ãåç
§ããŠãã ããã |
+| **Loading** | ããŒãžãšã¢ããªã±ãŒã·ã§ã³ã®ãã€ã«ã¹ããŒã³ãããŒãäžã®ã¢ã»ãããåŠçäžã®ãªã¯ãšã¹ãã[ããŒã](#loading)ãåç
§ããŠãã ããã |
+| **Memory** | JavaScript ããŒãããããªã¡ã¢ãªãšãã®çš®é¡å¥ã®å
èš³ããã¹ã±ãŒã«ãå
±æããç·ã§è¡šç€ºããŸãã |
+| **Resources** | ãã¯ã¹ãã£ãã¬ã³ããŒã¿ãŒã²ãããã·ã§ãŒããŒããããã¡ãWebGPU ã§ã¯ãã€ãã©ã€ã³ã®æ°ã |
+| **Events** | ã€ãã³ãã®çš®é¡ããšã®è¡ã§ããã®ã€ãã³ãããã£ããã¬ãŒã ã瀺ããŸãã[ã€ãã³ã](#events)ãåç
§ããŠãã ããã |
+
+FrameãCPUãGPU ã®ãã£ãŒãã§ã¯ãç Žç·ããã£ã¹ãã¬ã€ã®ééã瀺ããŸãããã£ãŒãã«ã«ãŒãœã«ãåããããšãã€ã³ã¿ãŒã®äžã®ãã¬ãŒã ã®æ°å€ããããŒã¯ã«åããããšäœãèµ·ãããã衚瀺ãããŸãããã£ãŒããã»ã¯ã·ã§ã³ã®ååãã¯ãªãã¯ãããšæããããŸãããã£ãŒãã®æšªã®ãªã¹ãã§ç·ã®ãã§ãã¯ãå€ããšé衚瀺ã«ãªãããã£ãŒãã¯æ®ãã®ç·ã«åãããŠã¹ã±ãŒã«ãçŽããŸããååãšãã£ãŒãã®éã®åºåãç·ããã©ãã°ãããšãååã®åãåºããããŸãã
+
+ãã£ããã£ã®äžéšãèŠãã«ã¯ã次ã®ããã«ããŸãã
+
+- ãã¬ãŒã ãã¯ãªãã¯ãããšããã®ãã¬ãŒã ã[ãã¬ãŒã ã®ã¿ã€ã ã©ã€ã³](#the-frame-timeline)ã«è¡šç€ºãããèšé²ããããã¹ãŠã®å
容ãäžã®ããããã£ãã¥ãŒã«è¡šç€ºãããŸãã
+- ãã£ãŒãã®äžããã©ãã°ãããšãè€æ°ã®ãã¬ãŒã ããŸãšããŠéžæãããã®å¹³åã95ããŒã»ã³ã¿ã€ã«ãæå€§å€ã確èªã§ããŸããã¿ã€ã ã©ã€ã³ã«ã¯ãããã®å¹³åãã¬ãŒã ã衚瀺ãããŸãã
+- ãã£ãŒãã®äžã§ã¹ã¯ããŒã«ãããšãºãŒã ããäžã®ã¹ã¯ããŒã«ããŒããã©ãã°ããããShift ãæŒããªãããã£ãŒãã®äžããã©ãã°ãããšãã³ããŸããããã«ã¯ãªãã¯ãããšãã£ããã£å
šäœã®è¡šç€ºã«æ»ããŸãã
+- **â¹** ãš **âº** ã§1ãã¬ãŒã ãã€ç§»åãã**«** ã§æåã®ãã¬ãŒã ãã**»** ã§ææ°ã®ãã¬ãŒã ã衚瀺ããèšé²ã«åãããŠè¿œåŸããŸããããã«ã«ãã©ãŒã«ã¹ãããéã¯ãç¢å°ããŒã§1ãã¬ãŒã ãã€ïŒShift ã§10ãã¬ãŒã ãã€ïŒç§»åããHome ã§æåã®ãã¬ãŒã ã衚瀺ããEnd ã§ææ°ã®ãã¬ãŒã ã«è¿œåŸããŸãã
+
+### ã€ãã³ã {#events}
+
+| ã€ãã³ã | 瀺ããã® |
+|-------|-------|
+| **Hitches** | äœãåå ã§ãããäžå€®å€ã®ãã¬ãŒã ã®2å以äžã®æéãããã£ããã¬ãŒã ããŠãŒã¶ãŒã«ã«ã¯ã€ããšããŠèŠãããã¬ãŒã ã§ãã |
+| **Thread blocked** | Chromium ç³»ã®ãã©ãŠã¶ãå ±åããããã©ãŠã¶ã®ã¡ã€ã³ã¹ã¬ããã50ããªç§ä»¥äžããžãŒã ã£ããã¬ãŒã ãšãæãé·ãå®è¡ãããã¹ã¯ãªããããã¬ãŒã ãé
ããªã£ãçç±ã瀺ããŸããããã®ãªãããã㯠GPUããã©ãŠã¶ããã£ã¹ãã¬ã€ã«ãã£ãŠé
ãããã®ã§ããããã®ãããŒè¡šç€ºã«ãã®ããšã瀺ãããŸãã |
+| **Lightmaps** | ã©ã€ãããããŒãæã€ã¢ããªã±ãŒã·ã§ã³ã§ãã©ã€ãããããŒããã€ã¯ããã©ã€ããããã |
+| **Shaders** | ã³ã³ãã€ã«ãŸãã¯äœæãããã·ã§ãŒããŒãšãäœæãããã¬ã³ããŒãã€ãã©ã€ã³ã |
+| **Heap shrank** | JavaScript ããŒãã®çž®å°ãã€ãŸãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã |
+| **Resources** | äœæãŸãã¯ç Žæ£ããããã¯ã¹ãã£ãã¬ã³ããŒã¿ãŒã²ããããããã¡ã |
+| **Measures** | ã¢ããªã±ãŒã·ã§ã³ã `performance.measure` ã§èšæž¬ããåºéã |
+
+## ãã¬ãŒã ã®ã¿ã€ã ã©ã€ã³ {#the-frame-timeline}
+
+ãã£ãŒãã®äžã®ã¿ã€ã ã©ã€ã³ã¯ãéžæãããã¬ãŒã ããã®æéã«æ²¿ã£ãŠãã¬ã€ã ãã£ãŒãïŒflame chartïŒãšããŠè¡šç€ºããŸãã
+
+
+
+- **CPU** ã®è¡ã«ã¯ãã¢ããããŒãããã¹ãã¢ããããŒããInspectorãã¬ã³ããŒãšãå®è¡ãããäœçœ®ã«ã©ã€ããããã®ãã€ã¯ã衚瀺ãããŸãããã®äžã®è¡ã¯ãããã现ããåããŠè¡šç€ºããŸããç©çã®ã¹ããããšã¢ãã¡ãŒã·ã§ã³ãã¬ã³ããŒã®ãã§ãŒãºããããŠ[ã¹ã¯ãªããã®èšæž¬](#script-timing)ããªã³ã«ããå Žåã¯ã¢ããããŒããšãã¹ãã¢ããããŒãã®ã¹ã¯ãªãããšããããã¹ã¯ãªããã¿ã€ãå¥ã«åããè¡ã§ãã
+- **GPU** ã®è¡ã«ã¯ããã«ãŒã ã被åçæ·±åºŠãªã©ã®ãšãã§ã¯ããšããã®äžã«åãšãã§ã¯ããå®è¡ãããã¹ããããŠãšãã§ã¯ãã«å±ããªããã¹ã衚瀺ãããŸãã[GPU ã®èšæž¬](#gpu-timings)ãåç
§ããŠãã ããã
+- **Events** ã®è¡ã«ã¯ãã¡ã€ã³ã¹ã¬ããã®é·ãã¿ã¹ã¯ãš `performance.measure` ã§èšæž¬ãããåºéã衚瀺ããããã®äžã®è¡ã«ã¯ãã¬ãŒã ã®ãã€ã«ã¹ããŒã³ãã¢ã»ããããªã¯ãšã¹ãã衚瀺ãããŸãã
+
+ããŒã«ã«ãŒãœã«ãåããããšãã®æéããè¡ã«åããããšãã®è¡ã®ãã¹ãŠã®å
容ã衚瀺ãããŸããã¹ã¯ãªããã¿ã€ããã¯ãªãã¯ãããš Scripts ã¿ãã«ããã¹ããšãã§ã¯ããã¯ãªãã¯ãããš Frame graph ã¿ãã«ãã¢ã»ãããã¯ãªãã¯ãããš Assets ã¿ãã«è¡šç€ºãããŸããã¿ã€ã ã©ã€ã³ã®äžã§ã¹ã¯ããŒã«ãããšãã¬ãŒã ã®äžéšã«ãºãŒã ããäžã®ã¹ã¯ããŒã«ããŒããã©ãã°ããããShift ãæŒããªãããã©ãã°ãããšãã³ããããã«ã¯ãªãã¯ãããšãã¬ãŒã å
šäœã®è¡šç€ºã«æ»ããŸããã¿ã€ãã«ãã¯ãªãã¯ãããšæããããŸããŸãã
+
+äžã®ããããã£ãã¥ãŒã«ã¯ããã®ãã¬ãŒã ã«ã€ããŠèšé²ããããã¹ãŠã®å
容ãäžèŠ§è¡šç€ºãããŸããäœããã¬ãŒã ãé
ããããããã§ãŒãºå¥ã® CPU æéãåãã¹ã® GPU æéãã¹ã¯ãªãããã«ãŠã³ã¿ãŒãããŒãããããã®ãéä¿¡ããåŠçãã¡ã¢ãªãšãªãœãŒã¹ãã€ãã³ãã§ãã
+
+## GPU ã®èšæž¬ {#gpu-timings}
+
+**GPU timings** ããªã³ã«ãããšãGPU ã®æéãèšé²ããŸããWebGPU ã§ã¯åãã¹ãèšæž¬ããããã¹ã®ãšãã§ã¯ãã¯ãã¬ãŒã ã°ã©ãããããã®ãã¹ãå®è¡ãããã¹ãšããŠæ±ããããŸãããã¬ãŒã ã°ã©ããèšæž¬ãããã¹ãšäžèŽããªããªã£ãå Žåã¯ããã¹ãŠã®ãã¹ã GPU ã®è¡ã«è¡šç€ºãããŸããåãååã®ãã¹ãé£ç¶ããå Žå㯠Downsample Ã5 ã®ããã«1ã€ã®ã©ãã«ã«ãŸãšãããããã¬ãŒã ã®è©³çްã«ã¯ããããã®æéãäžèŠ§è¡šç€ºãããŸããWebGL ã§ã¯ãã¬ãŒã å
šäœã1ã€ãšããŠèšæž¬ããŸãã
+
+## ã¹ã¯ãªããã®èšæž¬ {#script-timing}
+
+**Script timing** ããªã³ã«ãããšãèšé²äžã«åã¹ã¯ãªããã¿ã€ããèšæž¬ããŸãããã® `update`ã`postUpdate`ã`initialize` ã®åŒã³åºãã®æéãããã®äžã§åŒã°ããåŒã³åºããé€ããŠèšæž¬ãããããããäœååŒã°ããããèšé²ããŸããCPU ãã£ãŒãã§ã¯ã¹ã¯ãªãããä»ã®ã·ã¹ãã ãšåããŠè¡šç€ºãããã¿ã€ã ã©ã€ã³ã§ã¯ã¹ã¯ãªãããå®è¡ãããäœçœ®ã«æç»ãããŸãã
+
+**Scripts** ãã£ãŒãã¯ããŸãšããŠéžæãããã¬ãŒã ããŸãã¯éžæããªããã°ãã£ããã£å
šäœã§æãæéã®ããã£ã10åã®ã¹ã¯ãªããã¿ã€ããç©ã¿äžããŠè¡šç€ºãããããã¹ãã€ã¯ãéžæãããšãã®åå ã®ã¹ã¯ãªãããåé¢ã«åºãŠããŸããæ®ãã¯1ã€ã®åž¯ã«ãŸãšãããããã®ãããŒè¡šç€ºã«äžèЧã衚瀺ãããŸãããªã¹ãã®äžã® **âž 10 more** ã§ãããã«10åã®ã¿ã€ãã«ç¬èªã®åž¯ãå²ãåœãŠãŸããæéã«é¢ä¿ãªãã¹ã¯ãªããã远ãç¶ããã«ã¯ããã¬ãŒã ã®è©³çŽ°ã®æšªã«ãã **Pin** ãæŒããããªã¹ãã§ Shift+ã¯ãªãã¯ããŠãã³çãããŸãããªã¹ãã®è¡ã Alt+ã¯ãªãã¯ãããšãã®è¡ã ãã衚瀺ããããäžåºŠ Alt+ã¯ãªãã¯ãããšãã¹ãŠã衚瀺ããŸãã
+
+åŒã³åºãã®èšæž¬ã«ã¯ãInspector ã®æéãšããŠæ°ããããçŽ0.5ãã€ã¯ãç§ã®ã³ã¹ããããããŸããã€ãã³ããã³ãã©ãŒãã¿ã€ããŒãPromise ã§è²»ããããæéã¯æ°ããããŸãããã¯ãã¹ãªãªãžã³åé¢ãããŠããªãããŒãžã§ã¯ããã©ãŠã¶ã®ã¯ããã¯ã0.1ããªç§å»ã¿ã«ãªããããå°ããªã¹ã¯ãªããã®æéã¯å€ãã®ãã¬ãŒã ããŸãšããŠéžæããã»ããæ£ç¢ºã«èªã¿åããŸãã
+
+## ããŒã {#loading}
+
+**Loading** ã»ã¯ã·ã§ã³ã¯ããã£ãŒããšåãæé軞ãå
±æããŸãã
+
+- **Milestones** ã¯ãããŒãžãšã¢ããªã±ãŒã·ã§ã³ã®ç¯ç®ã瀺ããŸããããŒãžã®å°çãDOM ã®æºåå®äºãæåã®ãã€ã³ããããªããŒããã¢ããªã±ãŒã·ã§ã³ã®éå§ãšæåã®ãã¬ãŒã ã§ãã
+- **Assets** ã¯ãåã¢ã»ããã®ããŒãããèŠæ±ããŠãããã®ãªãœãŒã¹ã®æºåãã§ãããŸã§è¡šç€ºããŸãããã¡ã€ã«ã®ãªã¯ãšã¹ãã¯æ¿ããããŒã¹ãªã©ãã®åŸã®åŠçã¯èã衚瀺ãããŸããè²ã¯ã¢ã»ããã®çš®é¡ã瀺ããè¡ã®ååã®ããŒã«ãããã«å¡äŸããããŸãã倱æãããã®ã¯èµ€ã§è¡šç€ºãããŸãã
+- **Requests** ã¯ãããŒãžã®ãªã¯ãšã¹ããããã€åŠçäžã ã£ããããã£ãŒã衚瀺ããŸãã
+
+ã»ã¯ã·ã§ã³ã«ã«ãŒãœã«ãåããããšããŒãäžã ã£ããã®ã衚瀺ãããã¢ã»ãããã¯ãªãã¯ãããš Assets ã¿ãã«è¡šç€ºãããŸãã
+
+## ã¢ããªã±ãŒã·ã§ã³ã®èµ·åã®èšé² {#recording-the-start-of-the-application}
+
+ã¢ããªã±ãŒã·ã§ã³ãæåã«å®è¡ãããã¬ãŒã ããèšé²ããã«ã¯ãInspector ã« `record: true` ãæž¡ããã`EntityInspector` ã¹ã¯ãªããã® `record` 屿§ãèšå®ããŸãã`app.init()` ã®çŽåŸã®ããã«ãã¢ããªã±ãŒã·ã§ã³ãæåã®ãã¬ãŒã ãå®è¡ããåã«äœæãããšãInspector ã¯ã¢ããªã±ãŒã·ã§ã³ã®èµ·åãèšé²ããŸãã
+
+```javascript
+const app = new AppBase(canvas);
+app.init(createOptions);
+
+// recording before the first frame records the start of the application too
+const inspector = new Inspector(app, { record: true });
+
+app.start();
+```
+
+ãã£ããã£ã¯ãã®åŸãããŒãžãéããŠããæåã®ãã¬ãŒã ãŸã§ã® **Startup** ãšã³ããªããå§ãŸããããŒãžã®ãªã¯ãšã¹ãããã€ã«ã¹ããŒã³ãããŒããããã¢ã»ãããã¡ã€ã³ã¹ã¬ããããããã¯ãããæéãå«ã¿ãŸãããã®è©³çްã«ã¯ãããã£ãæéãããŒãããããã®ãã·ã§ãŒããŒã®ã³ã³ãã€ã«ããããŠãªã¯ãšã¹ããšåŠçãåããæãé
ãã¢ã»ãããäžèŠ§è¡šç€ºãããŸããããã¯ãã£ããã£ã®1000ãšã³ããªã®1ã€ãªã®ã§ãä»ã®ãšã³ããªãšåãããã«æ°ãããã¬ãŒã ã«å Žæãè²ããŸãã
+
+
+
+ã³ãŒããã `inspector.recording` ãèšå®ãããšãã¢ããªã±ãŒã·ã§ã³ã®äžéšã®ååŸã§ãã£ããã£ãéå§ãŸãã¯åæ¢ã§ããŸãã
+
+```javascript
+// once the part to look at has run
+inspector.recording = false;
+```
+
+## ã«ãŠã³ã¿ãŒ {#counters}
+
+**Counters** ã»ã¯ã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ã [`app.stats.user`](https://api.playcanvas.com/engine/classes/AppStats.html#user) ã«ä¿æããã«ãŠã³ã¿ãŒããåãã¬ãŒã ã®çµäºæã®å€ã§ãã£ãŒã衚瀺ããŸããåäœã¯ã¢ããªã±ãŒã·ã§ã³ã決ãããããã«ãŠã³ã¿ãŒããšã«ç¬èªã®ã¹ã±ãŒã«ãæã€ç·ã§è¡šç€ºãããŸãããã¬ãŒã ã®è©³çްã«ã¯ãã®å€ãããŸãšããŠéžæãããã¬ãŒã ã§ã¯ãã®å¹³åã95ããŒã»ã³ã¿ã€ã«ãæå€§å€ãäžèŠ§è¡šç€ºãããŸããã«ãŠã³ã¿ãŒèªäœã«ã€ããŠã¯ [AppStatsã«ãããããã¡ã€ãªã³ã°](/user-manual/optimization/app-stats/)ãåç
§ããŠãã ããã
+
+```javascript
+// counted afresh each frame
+app.on('frameupdate', () => app.stats.user.set('enemies', 0));
+
+// wherever the application counts them
+app.stats.user.set('enemies', app.stats.user.get('enemies') + 1);
+```
+
+## ãšã³ãžã³ã®ãã«ã {#engine-builds}
+
+ãšã³ãžã³ã®ãªãªãŒã¹ãã«ãã¯ãã¢ããããŒããšã¬ã³ããŒãããããå
šäœãšããŠèšæž¬ããŸãããããã¡ã€ã©ãŒãã«ããšãããã°ãã«ãã§ã¯ããããã£ãŒã«ãããããã®æŽæ°ãšäœæãå«ãã¬ã³ããŒã®ãã§ãŒãºããããŒã³ãŒã«ã®å
èš³ãã·ã§ãŒããŒã®ã³ã³ãã€ã«ãã©ã€ããããã®ãã€ã¯ã远å ãããŸãã
+
+Inspector ã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¢ããããŒãã®äžã§å®è¡ãããããããã®æé㯠Inspector ãšããŠåããŠè¡šç€ºãããŸãã**Inspector time** ããªãã«ãããš CPU ãã£ãŒãããé€å€ããããã£ãŒãã¯ã¢ããªã±ãŒã·ã§ã³èªèº«ã®æéã«åãããŠã¹ã±ãŒã«ããŸãã
+
+## æ°å€ã®ã³ã㌠{#copying-the-figures}
+
+ã¿ãã®ååãå³ã¯ãªãã¯ãããšãã£ããã£å
šäœïŒåãã¬ãŒã ãšãã®èšé²å
容ãã¹ãŠïŒãããã£ãŒããã»ã¯ã·ã§ã³ã®ååããŸãã¯ãã®ãªã¹ãã®è¡ãå³ã¯ãªãã¯ãããšãã®ç³»åããã¬ãŒã ããšã«1è¡ãšããŠãJSON ãŸãã¯ã¹ãã¬ããã·ãŒãçšã® CSV ã§ã³ããŒããŸããã©ã¡ããããŸãšããŠéžæãããã¬ãŒã ãããå Žåã¯ãããã®ãã¬ãŒã ã察象ã«ãªããŸãããã£ãŒãã§ãã¬ãŒã ãå³ã¯ãªãã¯ãããšãã®ãã¬ãŒã ãããŸãšããŠéžæãããã¬ãŒã ã®äžã§å³ã¯ãªãã¯ãããšãã®æ°å€ããã¿ã€ã ã©ã€ã³ãå³ã¯ãªãã¯ãããšãã®ããŒãã³ããŒããŸãã
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/index.md
deleted file mode 100644
index 2c12f0e7c1f..00000000000
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/debugging/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: ãããã°
-description: ãã©ãŠã¶ã®éçºè
ããŒã«ã䜿ã£ãŠ PlayCanvas ã® Script ã®ãã°ãèŠã€ãä¿®æ£ããããŒã«ãšææ³ã§ãã
----
-
-ãããã°ã¯ãPlayCanvasã¹ã¯ãªããå
ã®åé¡ãç¹å®ããä¿®æ£ããããã«äžå¯æ¬ ã§ããã³ãŒããæåŸ
éãã«åäœããªãå Žåããããã®ããŒã«ãšãã¯ããã¯ã¯åé¡ãè¿
éã«èŠã€ããŠè§£æ±ºããã®ã«åœ¹ç«ã¡ãŸãã
-
-## ãããã°ãã¯ããã¯
-
-### ã³ã³ãœãŒã«ãã®ã³ã°
-
-ã³ãŒããäœãããŠããããçè§£ããæãæè»œãªæ¹æ³ã§ããå®è¡ãããŒã远跡ãã倿°ã®å€ãæ€æ»ããããã«`console.log()`ã¹ããŒãã¡ã³ãã远å ããŸãã
-
-**[ã³ã³ãœãŒã«ãã®ã³ã°ãåŠã¶ â](./console-logging.md)**
-
-### ãã©ãŠã¶éçºè
ããŒã«
-
-ãã¬ãŒã¯ãã€ã³ããã¹ãããã¹ã«ãŒãããã°ãããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ã䜿çšããŠãå®è¡äžã®ã³ãŒããè©³çŽ°ã«æ€æ»ããŸãã
-
-**[ãã©ãŠã¶éçºè
ããŒã«ãåŠã¶ â](./browser-dev-tools.md)**
-
-### Inspector
-
-å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®å
éšã確èªããŸãããšã³ãã£ãã£ãšã³ã³ããŒãã³ããã«ã¡ã©ãã¢ã»ãããGPUãªãœãŒã¹ãåãã¬ãŒã ã®ãã¹ããããŠãã¹ã®æç»ã1ã€ãã€ç¢ºèªã§ããŸãã
-
-**[InspectorãåŠã¶ â](./inspector.md)**
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/index.md b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/index.md
index 29a91ada48e..10a9cc4a416 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/index.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/user-manual/scripting/index.md
@@ -68,5 +68,5 @@ Rotate.prototype.update = function(dt) {
- [ã¹ã¯ãªãã屿§](./script-attributes/index.md) â èšå®å¯èœãªããããã£ã®å
¬éã
- [Engine API](./engine-api.md) â äž»èŠãªã¯ã©ã¹ãšãã¿ãŒã³ã
- [ã€ãã³ã](./events.md) â ã¹ã¯ãªããéã®éä¿¡ã
-- [ãããã°](./debugging/index.md) â ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ããã®ããŒã«ãšææ³ã
+- [ãããã°](/user-manual/debugging/) â ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ããã®ããŒã«ãšææ³ã
- [ç§»è¡ã¬ã€ã](./migration-guide.md) â ã¯ã©ã·ãã¯ã¹ã¯ãªããããESMã¹ã¯ãªãããžã®ã¢ããã°ã¬ãŒãã
diff --git a/llms/user-manual/engine/llms.txt b/llms/user-manual/engine/llms.txt
index f42c23a1980..e1cf4888c7f 100644
--- a/llms/user-manual/engine/llms.txt
+++ b/llms/user-manual/engine/llms.txt
@@ -1,5 +1,5 @@
---
-covers: [engine, ecs, scripting, assets, graphics, gaussian-splatting, physics, animation, user-interface, xr, optimization, 2D]
+covers: [engine, ecs, scripting, assets, graphics, gaussian-splatting, physics, animation, user-interface, xr, debugging, optimization, 2D]
---
# PlayCanvas Engine
@@ -52,7 +52,8 @@ Use this index to write code against the engine directly. React, Web Components
- [Events](/user-manual/scripting/events/): Communicating between scripts with `on`, `once`, `off` and `fire`.
- [Application Lifecycle](/user-manual/scripting/application-lifecycle/): The order in which an application initializes and runs its update loop.
- [Migration Guide](/user-manual/scripting/migration-guide/): Converting classic scripts to ESM scripts step by step.
-- [Debugging](/user-manual/scripting/debugging/): Finding script bugs with the browser's developer tools.
+- [Debugging](/user-manual/debugging/): Finding bugs with logging, the browser's developer tools, the Inspector and debug drawing.
+- [Inspector](/user-manual/debugging/inspector/): A debug panel for the running application: its entities, cameras, assets, frame graph, GPU resources and scripts, and stepping through the draws of a frame.
## Assets
@@ -186,8 +187,10 @@ Use this index to write code against the engine directly. React, Web Components
- [Platforms](/user-manual/xr/platforms/): Tested devices and browsers for VR, AR and each capability.
- [Optimizing WebXR Applications](/user-manual/xr/optimizing-webxr/): Keeping the frame rate up despite stereo rendering, draw calls and AR tracking costs.
-## Optimization
+## Debugging and Optimization
+- [Debugging and Optimization](/user-manual/optimization/): Which tool to use to debug and profile an application, and the goals of optimizing it.
+- [Inspector Performance](/user-manual/optimization/inspector-performance/): Recording frames with the Inspector: frame, CPU, GPU and script times, loading and the start of the application, counters, and each frame on a timeline.
- [General Guidelines](/user-manual/optimization/guidelines/): Tuning scripts, draw calls, batching, shaders, lighting, textures and post effects.
- [Optimizing Load Time](/user-manual/optimization/load-time/): Image formats, texture sizes, preloading, asset audits, compression and staged loading.
- [Texture Compression](/user-manual/optimization/texture-compression/): Reducing GPU memory and download size with Basis compressed textures.
diff --git a/sidebars.js b/sidebars.js
index f655aab2635..74f25400236 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -755,19 +755,8 @@ const sidebars = {
},
'user-manual/scripting/engine-api',
'user-manual/scripting/events',
- {
- type: 'category',
- label: 'Debugging',
- link: {
- type: 'doc',
- id: 'user-manual/scripting/debugging/index',
- },
- items: [
- 'user-manual/scripting/debugging/console-logging',
- 'user-manual/scripting/debugging/browser-dev-tools',
- 'user-manual/scripting/debugging/inspector'
- ],
- },
+ // the debugging of scripts is part of Debugging and Optimization, linked from here
+ { type: 'ref', id: 'user-manual/debugging/index', label: 'Debugging' },
'user-manual/scripting/migration-guide'
],
},
@@ -1217,22 +1206,48 @@ const sidebars = {
},
{
type: 'category',
- label: 'Optimization',
+ label: 'Debugging and Optimization',
link: {
type: 'doc',
id: 'user-manual/optimization/index',
},
items: [
- 'user-manual/optimization/guidelines',
- 'user-manual/optimization/texture-compression',
- 'user-manual/optimization/mini-stats',
- 'user-manual/optimization/app-stats',
- 'user-manual/optimization/profiler',
- 'user-manual/optimization/gpu-profiling',
- 'user-manual/optimization/runtime-devicepixelratio',
- 'user-manual/optimization/load-time',
- 'user-manual/optimization/optimizing-scene-format',
- 'user-manual/optimization/troubleshooting-performance',
+ {
+ type: 'category',
+ label: 'Debugging',
+ link: {
+ type: 'doc',
+ id: 'user-manual/debugging/index',
+ },
+ items: [
+ 'user-manual/debugging/console-logging',
+ 'user-manual/debugging/browser-dev-tools',
+ 'user-manual/debugging/inspector',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Profiling',
+ items: [
+ 'user-manual/optimization/mini-stats',
+ 'user-manual/optimization/app-stats',
+ 'user-manual/optimization/inspector-performance',
+ 'user-manual/optimization/profiler',
+ 'user-manual/optimization/gpu-profiling',
+ ],
+ },
+ {
+ type: 'category',
+ label: 'Optimization',
+ items: [
+ 'user-manual/optimization/guidelines',
+ 'user-manual/optimization/texture-compression',
+ 'user-manual/optimization/runtime-devicepixelratio',
+ 'user-manual/optimization/load-time',
+ 'user-manual/optimization/optimizing-scene-format',
+ 'user-manual/optimization/troubleshooting-performance',
+ ],
+ },
],
},
sectionHeader('Foundational APIs'),
diff --git a/static/img/user-manual/scripting/debugging/chrome-debugger.png b/static/img/user-manual/debugging/chrome-debugger.png
similarity index 100%
rename from static/img/user-manual/scripting/debugging/chrome-debugger.png
rename to static/img/user-manual/debugging/chrome-debugger.png
diff --git a/static/img/user-manual/scripting/debugging/firefox-debugger.png b/static/img/user-manual/debugging/firefox-debugger.png
similarity index 100%
rename from static/img/user-manual/scripting/debugging/firefox-debugger.png
rename to static/img/user-manual/debugging/firefox-debugger.png
diff --git a/static/img/user-manual/scripting/debugging/inspector/debug-frame.webp b/static/img/user-manual/debugging/inspector/debug-frame.webp
similarity index 100%
rename from static/img/user-manual/scripting/debugging/inspector/debug-frame.webp
rename to static/img/user-manual/debugging/inspector/debug-frame.webp
diff --git a/static/img/user-manual/scripting/debugging/inspector/frame-graph.png b/static/img/user-manual/debugging/inspector/frame-graph.png
similarity index 100%
rename from static/img/user-manual/scripting/debugging/inspector/frame-graph.png
rename to static/img/user-manual/debugging/inspector/frame-graph.png
diff --git a/static/img/user-manual/scripting/debugging/inspector/inspector.png b/static/img/user-manual/debugging/inspector/inspector.png
similarity index 100%
rename from static/img/user-manual/scripting/debugging/inspector/inspector.png
rename to static/img/user-manual/debugging/inspector/inspector.png
diff --git a/static/img/user-manual/optimization/inspector-performance/performance-startup.webp b/static/img/user-manual/optimization/inspector-performance/performance-startup.webp
new file mode 100644
index 00000000000..fde1d27b86b
Binary files /dev/null and b/static/img/user-manual/optimization/inspector-performance/performance-startup.webp differ
diff --git a/static/img/user-manual/optimization/inspector-performance/performance-timeline.webp b/static/img/user-manual/optimization/inspector-performance/performance-timeline.webp
new file mode 100644
index 00000000000..0e9489690b3
Binary files /dev/null and b/static/img/user-manual/optimization/inspector-performance/performance-timeline.webp differ
diff --git a/static/img/user-manual/optimization/inspector-performance/performance.webp b/static/img/user-manual/optimization/inspector-performance/performance.webp
new file mode 100644
index 00000000000..5fae9d1b916
Binary files /dev/null and b/static/img/user-manual/optimization/inspector-performance/performance.webp differ
diff --git a/utils/plugins/llms/test/corpus.test.mjs b/utils/plugins/llms/test/corpus.test.mjs
index 5c0d41f0e23..065b96bab87 100644
--- a/utils/plugins/llms/test/corpus.test.mjs
+++ b/utils/plugins/llms/test/corpus.test.mjs
@@ -137,7 +137,7 @@ describe('the generated files', () => {
});
it('keeps the code of every tab', () => {
- const fences = section('/user-manual/scripting/debugging/console-logging/').match(/^```/gm);
+ const fences = section('/user-manual/debugging/console-logging/').match(/^```/gm);
assert.equal(fences.length, 10);
});