Saharsh Ananta Jaiswal e43de2ad2c TableView: TiP attribution, per-operation TiP tests and TableView_Instance telemetry (#12301)
Builds on #12120. TableView's TiP blames the app only when its own code
decided the outcome, each key operation has its own TiP test and
measure, and telemetry records one event per table load.

## TiP tests
| Test | Measure | Fails with |
|---|---|---|
| Initialize | 64477764 | `template_setup_failed`,
`source_attach_failed` |
| Sort | 64745033 | `sort_failed` |
| Edit begin | 64745034 | `edit_begin_failed` |
| Edit commit | 64745035 | `edit_commit_failed` |
| Filter | 64745036 | `filter_failed` |
| Expand or collapse one group | 64745037 | `group_expansion_failed` |
| Expand or collapse one tree node | 64745038 |
`hierarchy_expansion_failed` |

- A test fails, with the HRESULT, only when TableView's own code throws.
App code's exceptions are tagged where TableView calls it, so the test
closes Ignored (`application_fault`) only when one of them decided the
outcome.
- Column code: the editing hooks are TableView's for every column,
except where they realize or focus a `CellEditingTemplate`'s content.
That content, and the overrides of a column class the app derived, are
the app's.
- Initialize runs from the template applied with a source attached until
the first row or group header is laid out. Unloaded before that with
rows and a body viewport, it closes Ignored as `unloaded_before_render`;
otherwise as `unloaded`.
- The metrics bucket is the flow direction and whether the source has at
least 1,000 rows before the filter. The metrics carry both row counts.
- No test runs for selection, a source swap after Initialize, a
cancelled edit, group configuration, a subtree expansion or an expansion
request that changes nothing. A failure in any of them still writes
`TableView_Error`.
- A process exit while a test runs is recorded by TiP as that test's
failure, and so is a crash or hang on Windows builds whose Error
Reporting recovers TiP results.
- 64477774, the old combined operation test, is retired after this
merges.

## Telemetry
- `TableView_Instance` (one per load) replaces
`TableView_SessionSummary`: enabled and used features, source-row,
data-row and realized-row buckets, column and source kinds, RTL, and an
incomplete template.
- An app filter predicate, sort or group key selector or custom comparer
that throws is still contained, and now writes one recoverable
`TableView_Error` per operation with the first HRESULT and a
`FaultCount`, also when the operation then fails. A verb an app delegate
starts inside another counts only its own.
- Scrolling is not measured in the field; scroll performance is left to
a lab benchmark.

## Validation
- 28 operation, 15 Initialize and 20 `TableView_Instance` cases, checked
from captured ETW events of the final build. The 7 operation and
Initialize cases whose behavior changes also ran on `f6c060a` and differ
there; the other 22 operation cases match it.
- 175 earlier cases rerun against `42b575b`: 174 identical; the other
now also reports a group key that threw inside a filter that then threw
an app data fault, as intended.
- A local fault-injection build forces 19 failure paths, including
built-in and app-derived column code, TableView's own code around a
`CellEditingTemplate` editor, failures after contained app delegates, an
unload before the first row's layout pass, and a swallowed app
exception. TableView's own failures fail their test with its reason and
the HRESULT; an app-tagged one closes Ignored.
- UI Automation walkthrough of the final build (sort, edit, filter,
group, tree node, selection): 13 successes, each under its own measure,
none for selection, and no `TableView_Error`.
- MSBuild: an internal pipeline build fails when the TiP package or its
config is missing; the real package, the opt-out, local builds and
external pipelines pass. A build with the public stub compiles.

## Notes
- Versions start at 1 (`SchemaVersion`, `InstanceVersion`, both TiP data
versions), since nothing has shipped.
- Internal pipeline builds (`IsInternalWinUIBuild` and `TF_BUILD`) fail
when Tabular falls back to the public TiP stub;
`UseTestInProductionStub=true` chooses it on purpose.
- The dev spec's "Telemetry and TiP" section documents every event,
test, field and known gap.
- Left out of the telemetry plan: a resource-load outcome (a missing
`TabularControlsResources` fails at XAML parse) and separate "reached
past the box" bits (`ColumnKinds` covers them).
- Commits: `TableView_Instance` (`1737209`), Initialize (`6687f88`),
per-operation tests (`1f82669`), review fixes (`927f474`), merge with
main after #12307 (`42b575b`, conflicts in `BeginEdit` and the sort
apply path), Copilot review fixes (`1f66475`). Review with whitespace
hidden.
2026-10-26 16:34:21 +05:30
2018-12-03 17:20:35 -08:00
2018-07-26 11:45:33 -07:00
2019-08-09 10:44:38 -07:00
2022-05-20 13:29:18 -07:00

WinUI hero image

WinUI

Follow @windowsui

About WinUI · Documentation · Release notes

WinUI is a user interface layer that contains modern controls and styles for building Windows apps. The current generation is WinUI 3, which ships as part of the Windows App SDK.

  • Modern UI: WinUI embodies Fluent Design to enable intuitive, accessible, and powerful experiences and the latest user interface patterns.
  • Developers in control: Use .NET with C# or C++ to write apps that run great on x86, x64 and ARM.
  • Optimized for modern experiences & hardware: Create performant experiences with WinUI that are optimized for modern hardware.
  • Part of the Windows App SDK: The Windows App SDK is a set of libraries, frameworks, components, and tools that you can use in your apps to access powerful Windows platform functionality from all kinds of apps on many versions of Windows. The Windows App SDK combines the powers of Win32 native applications alongside modern API usage techniques, so your apps light up everywhere your users are.
  • Powers key experiences in Windows: Windows experiences and apps are built with WinUI. Its rich control set and styles make it easy to develop high-quality experiences used by millions every day.

Powers key experiences in Windows

📋 Getting started with WinUI

For WinUI, your app's users must be on Windows 10 1809 - Build 17763 or newer (including Windows Insider Previews).

The full documentation of WinUI can be found on Microsoft Learn:


Make sure to also check out the WinUI 3 Gallery, our interactive sample experience showing everything you can do with WinUI.

WinUI 3 Gallery

📺 WinUI Community Call

The WinUI Community Call is your opportunity to learn about WinUI and to engage with the WinUI team and community. Join us online on YouTube at the Windows Developer channel.

📢 Contributing to WinUI

The WinUI team welcomes your feedback! To understand how we handle incoming feature requests and bugs, please see our contribution handling guidelines.

For information on how to contribute, please see Contributing to WinUI.

Warning

We're not yet ready to accept code contributions, but we are working towards that goal. It is now possible to build the WinUI product binaries, with work in progress to share test code and enabling locally running tests. To get started building WinUI from source and see more details on current limitations, see Getting started with building WinUI. See the WinUI OSS Update post to check the latest status.

For the latest code and updates, use the main branch.

🛣️ Roadmap

For info on the WinUI release schedule and high level plans please see the WinUI roadmap.

🔧 WinUI for UWP

WinUI for UWP (WinUI 2) is a library of controls that provides Microsoft UI controls and features for UWP apps. Learn more about WinUI for UWP here or download the source code here.

You can get the WinUI 2 Gallery on the Microsoft Store and see the source code here.

Data/Telemetry

This project collects usage data and sends it to Microsoft to help improve our products and services. Note, however, that no data collection is performed when using your private builds.

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct.

For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Languages
C++ 67%
C# 28.8%
QMake 1.3%
Roff 0.8%
C 0.7%
Other 1.2%