react-native-windows 0.84.0-preview.2 → 0.84.0-preview.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Common/Common.vcxproj +1 -1
- package/Folly/Folly.vcxproj +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +4 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +3 -0
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -1
- package/PropertySheets/External/Microsoft.ReactNative.Composition.CppApp.targets +2 -2
- package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.targets +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +2 -2
- package/ReactCommon/ReactCommon.vcxproj +1 -1
- package/Scripts/perf/compare-results.js +68 -12
- package/package.json +3 -3
package/Common/Common.vcxproj
CHANGED
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
</ItemGroup>
|
|
95
95
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
96
96
|
<ItemGroup>
|
|
97
|
-
<PackageReference Include="boost" Version="1.
|
|
97
|
+
<PackageReference Include="boost" Version="1.84.0.0" />
|
|
98
98
|
<PackageReference Include="Microsoft.Windows.CppWinRT" Version="$(CppWinRTVersion)" PrivateAssets="all" />
|
|
99
99
|
</ItemGroup>
|
|
100
100
|
<ImportGroup Label="ExtensionTargets">
|
package/Folly/Folly.vcxproj
CHANGED
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
<TemporaryFollyPatchFiles Include="$(MSBuildThisFileDirectory)\TEMP_UntilFollyUpdate\**\*.*" />
|
|
365
365
|
</ItemGroup>
|
|
366
366
|
<ItemGroup>
|
|
367
|
-
<PackageReference Include="boost" Version="1.
|
|
367
|
+
<PackageReference Include="boost" Version="1.84.0.0" />
|
|
368
368
|
</ItemGroup>
|
|
369
369
|
<Target Name="Deploy" />
|
|
370
370
|
<!-- Reenable this task if we need to temporarily replace any folly files for fixes, while we wait for PRs to land in folly -->
|
|
@@ -1023,16 +1023,16 @@ void ScrollViewComponentView::OnKeyDown(
|
|
|
1023
1023
|
args.Handled(pageUp(true));
|
|
1024
1024
|
break;
|
|
1025
1025
|
case winrt::Windows::System::VirtualKey::Up:
|
|
1026
|
-
args.Handled(lineUp(
|
|
1026
|
+
args.Handled(lineUp(false));
|
|
1027
1027
|
break;
|
|
1028
1028
|
case winrt::Windows::System::VirtualKey::Down:
|
|
1029
|
-
args.Handled(lineDown(
|
|
1029
|
+
args.Handled(lineDown(false));
|
|
1030
1030
|
break;
|
|
1031
1031
|
case winrt::Windows::System::VirtualKey::Left:
|
|
1032
|
-
args.Handled(lineLeft(
|
|
1032
|
+
args.Handled(lineLeft(false));
|
|
1033
1033
|
break;
|
|
1034
1034
|
case winrt::Windows::System::VirtualKey::Right:
|
|
1035
|
-
args.Handled(lineRight(
|
|
1035
|
+
args.Handled(lineRight(false));
|
|
1036
1036
|
break;
|
|
1037
1037
|
}
|
|
1038
1038
|
|
package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp
CHANGED
|
@@ -1780,7 +1780,10 @@ void WindowsTextInputComponentView::DrawText() noexcept {
|
|
|
1780
1780
|
}
|
|
1781
1781
|
|
|
1782
1782
|
// TODO keep track of proper invalid rect
|
|
1783
|
+
// Prevent reentrancy: TxDrawD2D may call TxViewChange -> DrawText
|
|
1784
|
+
m_cDrawBlock++;
|
|
1783
1785
|
auto hrDraw = m_textServices->TxDrawD2D(d2dDeviceContext, &rc, nullptr, TXTVIEW_ACTIVE);
|
|
1786
|
+
m_cDrawBlock--;
|
|
1784
1787
|
winrt::check_hresult(hrDraw);
|
|
1785
1788
|
|
|
1786
1789
|
// draw placeholder text if needed
|
|
@@ -426,7 +426,7 @@
|
|
|
426
426
|
</ProjectReference>
|
|
427
427
|
</ItemGroup>
|
|
428
428
|
<ItemGroup>
|
|
429
|
-
<PackageReference Include="boost" Version="1.
|
|
429
|
+
<PackageReference Include="boost" Version="1.84.0.0" />
|
|
430
430
|
<PackageReference Include="Microsoft.Windows.CppWinRT" Version="$(CppWinRTVersion)" PrivateAssets="all" />
|
|
431
431
|
<PackageReference Include="Microsoft.JavaScript.Hermes" Version="$(HermesVersion)" />
|
|
432
432
|
<PackageReference Include="$(WinUIPackageName)" Version="$(WinUIPackageVersion)" Condition="'$(OverrideWinUIPackage)'!='true'" />
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
<Import Project="$(ReactNativeWindowsDir)\PropertySheets\External\Microsoft.ReactNative.Uwp.CppApp.targets" />
|
|
22
22
|
|
|
23
23
|
<ItemGroup>
|
|
24
|
-
<PackageReference Include="boost" Version="1.
|
|
24
|
+
<PackageReference Include="boost" Version="1.84.0.0" />
|
|
25
25
|
<PackageReference Include="Microsoft.VCRTForwarders.140" Version="1.0.2-rc" />
|
|
26
26
|
</ItemGroup>
|
|
27
27
|
|
|
28
|
-
</Project>
|
|
28
|
+
</Project>
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
<Import Project="$(ReactNativeWindowsDir)\PropertySheets\Codegen.targets" />
|
|
24
24
|
|
|
25
25
|
<ItemGroup>
|
|
26
|
-
<PackageReference Include="boost" Version="1.
|
|
26
|
+
<PackageReference Include="boost" Version="1.84.0.0" />
|
|
27
27
|
<PackageReference Include="Microsoft.VCRTForwarders.140" Version="1.0.2-rc" />
|
|
28
28
|
</ItemGroup>
|
|
29
29
|
|
|
30
|
-
</Project>
|
|
30
|
+
</Project>
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
-->
|
|
11
11
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
12
12
|
<PropertyGroup>
|
|
13
|
-
<ReactNativeWindowsVersion>0.84.0-preview.
|
|
13
|
+
<ReactNativeWindowsVersion>0.84.0-preview.4</ReactNativeWindowsVersion>
|
|
14
14
|
<ReactNativeWindowsMajor>0</ReactNativeWindowsMajor>
|
|
15
15
|
<ReactNativeWindowsMinor>84</ReactNativeWindowsMinor>
|
|
16
16
|
<ReactNativeWindowsPatch>0</ReactNativeWindowsPatch>
|
|
17
17
|
<ReactNativeWindowsCanary>false</ReactNativeWindowsCanary>
|
|
18
|
-
<ReactNativeWindowsCommitId>
|
|
18
|
+
<ReactNativeWindowsCommitId>c72727372283e8a8b3a82c21d817ad737c27f5ae</ReactNativeWindowsCommitId>
|
|
19
19
|
</PropertyGroup>
|
|
20
20
|
</Project>
|
|
@@ -245,7 +245,7 @@
|
|
|
245
245
|
</ProjectReference>
|
|
246
246
|
</ItemGroup>
|
|
247
247
|
<ItemGroup>
|
|
248
|
-
<PackageReference Include="boost" Version="1.
|
|
248
|
+
<PackageReference Include="boost" Version="1.84.0.0" />
|
|
249
249
|
<PackageReference Include="Microsoft.Windows.CppWinRT" Version="$(CppWinRTVersion)" PrivateAssets="all" />
|
|
250
250
|
</ItemGroup>
|
|
251
251
|
<PropertyGroup>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* node vnext/Scripts/perf/compare-results.js [options]
|
|
11
11
|
*
|
|
12
12
|
* Options:
|
|
13
|
-
* --results <path> Path to CI results JSON (default: .perf-results/results.json)
|
|
13
|
+
* --results <path> Path to CI results JSON (repeatable, default: .perf-results/results.json)
|
|
14
14
|
* --baselines <dir> Path to base branch perf snapshots directory
|
|
15
15
|
* --output <path> Path to write markdown report (default: .perf-results/report.md)
|
|
16
16
|
* --fail-on-regression Exit 1 if regressions found (default: true in CI)
|
|
@@ -25,17 +25,29 @@ const path = require('path');
|
|
|
25
25
|
|
|
26
26
|
function parseArgs() {
|
|
27
27
|
const args = process.argv.slice(2);
|
|
28
|
+
|
|
29
|
+
// Auto-discover results files: JS perf + native perf
|
|
30
|
+
const defaultResults = [
|
|
31
|
+
'.perf-results/results.json',
|
|
32
|
+
'.native-perf-results/results.json',
|
|
33
|
+
].filter(p => fs.existsSync(p));
|
|
34
|
+
|
|
28
35
|
const opts = {
|
|
29
|
-
results:
|
|
36
|
+
results: defaultResults,
|
|
30
37
|
baselines: null, // auto-detect from test file paths
|
|
31
38
|
output: '.perf-results/report.md',
|
|
32
39
|
failOnRegression: !!process.env.CI,
|
|
33
40
|
};
|
|
34
41
|
|
|
42
|
+
let explicitResults = false;
|
|
35
43
|
for (let i = 0; i < args.length; i++) {
|
|
36
44
|
switch (args[i]) {
|
|
37
45
|
case '--results':
|
|
38
|
-
|
|
46
|
+
if (!explicitResults) {
|
|
47
|
+
opts.results = [];
|
|
48
|
+
explicitResults = true;
|
|
49
|
+
}
|
|
50
|
+
opts.results.push(args[++i]);
|
|
39
51
|
break;
|
|
40
52
|
case '--baselines':
|
|
41
53
|
opts.baselines = args[++i];
|
|
@@ -98,6 +110,7 @@ function compareEntry(head, base, threshold) {
|
|
|
98
110
|
: 0;
|
|
99
111
|
|
|
100
112
|
const errors = [];
|
|
113
|
+
const isTrackMode = threshold.mode === 'track';
|
|
101
114
|
|
|
102
115
|
const absoluteDelta = head.medianDuration - base.medianDuration;
|
|
103
116
|
const minAbsoluteDelta =
|
|
@@ -126,8 +139,9 @@ function compareEntry(head, base, threshold) {
|
|
|
126
139
|
head,
|
|
127
140
|
base,
|
|
128
141
|
percentChange,
|
|
129
|
-
passed: errors.length === 0,
|
|
142
|
+
passed: isTrackMode || errors.length === 0,
|
|
130
143
|
errors,
|
|
144
|
+
isTrackMode,
|
|
131
145
|
};
|
|
132
146
|
}
|
|
133
147
|
|
|
@@ -207,6 +221,24 @@ function generateMarkdown(suiteComparisons, ciResults) {
|
|
|
207
221
|
}
|
|
208
222
|
}
|
|
209
223
|
|
|
224
|
+
// Track-mode warnings (not blocking)
|
|
225
|
+
const trackedWarnings = suiteComparisons.flatMap(s =>
|
|
226
|
+
s.results.filter(r => r.isTrackMode && r.errors.length > 0),
|
|
227
|
+
);
|
|
228
|
+
if (trackedWarnings.length > 0) {
|
|
229
|
+
md += '### ⚠️ Tracked (not blocking)\n\n';
|
|
230
|
+
md += '| Scenario | Baseline | Current | Change |\n';
|
|
231
|
+
md += '|----------|----------|---------|--------|\n';
|
|
232
|
+
for (const r of trackedWarnings) {
|
|
233
|
+
const baseline = r.base ? `${r.base.meanDuration.toFixed(2)}ms` : 'N/A';
|
|
234
|
+
const current = r.head ? `${r.head.meanDuration.toFixed(2)}ms` : 'N/A';
|
|
235
|
+
const change =
|
|
236
|
+
r.percentChange != null ? `+${r.percentChange.toFixed(1)}%` : 'N/A';
|
|
237
|
+
md += `| ${r.name} | ${baseline} | ${current} | ${change} |\n`;
|
|
238
|
+
}
|
|
239
|
+
md += '\n';
|
|
240
|
+
}
|
|
241
|
+
|
|
210
242
|
// Passed suites
|
|
211
243
|
const passedSuites = suiteComparisons.filter(s => !s.hasRegressions);
|
|
212
244
|
if (passedSuites.length > 0) {
|
|
@@ -257,17 +289,41 @@ function generateMarkdown(suiteComparisons, ciResults) {
|
|
|
257
289
|
function main() {
|
|
258
290
|
const opts = parseArgs();
|
|
259
291
|
|
|
260
|
-
// 1. Load CI results JSON
|
|
261
|
-
|
|
262
|
-
|
|
292
|
+
// 1. Load CI results JSON (supports multiple --results paths)
|
|
293
|
+
const ciResults = {
|
|
294
|
+
suites: [],
|
|
295
|
+
branch: '',
|
|
296
|
+
commitSha: '',
|
|
297
|
+
timestamp: '',
|
|
298
|
+
summary: {
|
|
299
|
+
totalSuites: 0,
|
|
300
|
+
totalTests: 0,
|
|
301
|
+
passed: 0,
|
|
302
|
+
failed: 0,
|
|
303
|
+
durationMs: 0,
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
const resultsPaths = opts.results.filter(p => fs.existsSync(p));
|
|
307
|
+
if (resultsPaths.length === 0) {
|
|
308
|
+
console.error(`❌ No results files found: ${opts.results.join(', ')}`);
|
|
263
309
|
console.error('Run perf tests with CI=true first: CI=true yarn perf:ci');
|
|
264
310
|
process.exit(1);
|
|
265
311
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
312
|
+
for (const resultsPath of resultsPaths) {
|
|
313
|
+
const partial = JSON.parse(fs.readFileSync(resultsPath, 'utf-8'));
|
|
314
|
+
ciResults.suites.push(...(partial.suites || []));
|
|
315
|
+
ciResults.branch = ciResults.branch || partial.branch;
|
|
316
|
+
ciResults.commitSha = ciResults.commitSha || partial.commitSha;
|
|
317
|
+
ciResults.timestamp = ciResults.timestamp || partial.timestamp;
|
|
318
|
+
ciResults.summary.totalSuites += partial.summary?.totalSuites || 0;
|
|
319
|
+
ciResults.summary.totalTests += partial.summary?.totalTests || 0;
|
|
320
|
+
ciResults.summary.passed += partial.summary?.passed || 0;
|
|
321
|
+
ciResults.summary.failed += partial.summary?.failed || 0;
|
|
322
|
+
ciResults.summary.durationMs += partial.summary?.durationMs || 0;
|
|
323
|
+
console.log(
|
|
324
|
+
`📊 Loaded ${partial.suites.length} suite(s) from ${resultsPath}`,
|
|
325
|
+
);
|
|
326
|
+
}
|
|
271
327
|
|
|
272
328
|
// 2. Compare each suite against its committed baseline
|
|
273
329
|
const suiteComparisons = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-windows",
|
|
3
|
-
"version": "0.84.0-preview.
|
|
3
|
+
"version": "0.84.0-preview.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@react-native-community/cli": "20.0.0",
|
|
27
27
|
"@react-native-community/cli-platform-android": "20.0.0",
|
|
28
28
|
"@react-native-community/cli-platform-ios": "20.0.0",
|
|
29
|
-
"@react-native-windows/cli": "0.84.0-preview.
|
|
29
|
+
"@react-native-windows/cli": "0.84.0-preview.2",
|
|
30
30
|
"@react-native/assets": "1.0.0",
|
|
31
31
|
"@react-native/assets-registry": "0.84.1",
|
|
32
32
|
"@react-native/codegen": "0.84.1",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"yargs": "^17.6.2"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
|
-
"@react-native-windows/codegen": "0.84.0-preview.
|
|
73
|
+
"@react-native-windows/codegen": "0.84.0-preview.2",
|
|
74
74
|
"@react-native/metro-config": "0.84.1",
|
|
75
75
|
"@rnw-scripts/babel-react-native-config": "0.0.0",
|
|
76
76
|
"@rnw-scripts/eslint-config": "1.2.38",
|