-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Jank no more doc #870
Jank no more doc #870
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comments after an initial pass over the document.
ui-performance/index.md
Outdated
<b> <a id="whats-the-point" class="anchor" href="#whats-the-point" aria-hidden="true"><span class="octicon octicon-link"></span></a>What's the point?</b> | ||
|
||
* Profile your app on a physical device. | ||
* Profile your app in profile mode. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lets add a link to the Flutter Modes document.
ui-performance/index.md
Outdated
faster on simulators than real devices, and some are slower. | ||
* Debug mode enables additional checks (such as asserts) that don’t run | ||
in profile or release builds, and these checks can be expensive. | ||
This is why debug mode is also called "slow mode." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we call it "Slow Mode" anymore.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For this first version of the page, while "slow mode" is still in some user's minds, I changed it to "this is why... is sometimes called "slow mode". It can be removed later, when slow mode is really good. Does that sound OK?
ui-performance/index.md
Outdated
Each graph represents the last 300 frames for the following two threads used | ||
in every Flutter app: | ||
|
||
* Engine<br> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe a short section on the threading within the Flutter engine is warranted before mentioning the threads the Engine and the Rasterizer runs on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A great point! Added, but needs your feedback. :)
ui-performance/index.md
Outdated
|
||
Generally, each frame should be created and displayed within 16ms | ||
(or 1/60th of a second). A frame exceeding this limit fails to display, | ||
resulting in jank, and a vertical red bar appears in one or both of the graphs. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe underscore that a vertical red bar in either graph is sufficient to indicate a dropped frame.
ui-performance/index.md
Outdated
you'll be using a version that has been customized for Flutter apps. | ||
|
||
{% comment %} | ||
I've talked to tooling SWEs who feel we're not ready to document this. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May I be CC'ed on these conversations please :) I didn't know observatory was changing (and especially the Flutter timeline).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair point!!! I learn about these mostly by running the plugins. :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This work was done last summer + fall, but definitely not well communicated. It should be an incremental improvement over the regular (Dart) timeline view.
When you encounter calls to `saveLayer`, ask yourself these questions: | ||
|
||
* Does the app need this effect? | ||
* Can any of these calls be eliminated? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can I apply the same effect to an individual element instead of a group.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolved.
ui-performance/index.md
Outdated
|
||
#### Checking for non-cached images | ||
|
||
Image I/O, such as passing images from host memory to device memory, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe add a section that mentions the difference between host and device memory. Or just mention IO operation such as reading from the assets store and decompressing the image.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this section misrepresents the purpose of the raster cache. It is only meant to snapshot complex hierarchies so that they are easier to render in subsequent frames. Using the raster cache and image decompression and upload and orthogonal issues.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Excellent feedback. Thx (But please review.)
ui-performance/index.md
Outdated
#### Checking for non-cached images | ||
|
||
Image I/O, such as passing images from host memory to device memory, | ||
can be expensive. Where possible, you want to cache images. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of "Where possible", say "Where absolutely necessary" since a raster cache entry is expensive to construct and resource intensive to keep around.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Generally, I think we should be careful about recommending users put more things into the raster cache.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, I missed that point when we talked. Thanks for clarifying.
ui-performance/index.md
Outdated
In most cases, you want to see checkerboards on static images, | ||
but not on non-static images. If a static image is not cached, | ||
you can cache it by placing it into a | ||
[RepaintBoundary](https://docs.flutter.io/flutter/widgets/RepaintBoundary-class.html) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe a section here that says that the engine may still ignore a repaint boundary if it thinks the image is not complex enough.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
More comments!
ui-performance/index.md
Outdated
@@ -1,6 +1,6 @@ | |||
--- | |||
layout: page | |||
title: Jank No More | |||
title: Improving UI Performance |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Flutter Performance Profiling" maybe?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
Each graph represents the last 300 frames for the following two threads used | ||
in every Flutter app: | ||
Flutter uses several threads to do its work. You have direct control | ||
over what happens in the UI thread, but no direct access to the other |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"All you Dart code runs on the UI thread. And although you have no direct access to any other thread, your actions on the UI thread have performance consequences on other threads.". Or something like that. "direct control" seemed odd since Dart code doesnt know about threads.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
threads. | ||
|
||
1. UI thread<br> | ||
The platform's main thread executes Dart code in the Dart VM. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is incorrect. The platforms main thread is different from the UI thread. The engine spawns a separate UI thread to run Dart code. The platforms main thread is unsurprisingly called the "Platform Thread".
ui-performance/index.md
Outdated
The platform's main thread executes Dart code in the Dart VM. | ||
This thread includes code that you wrote, and code executed by | ||
Flutter's framework on your app's behalf. | ||
Also referred to as Flutter's _engine_, plugins typically run here. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is incorrect. Plugin code runs on the "Platform" thread. Dart code runs on the "UI" thread.
ui-performance/index.md
Outdated
its data but, if this thread is slow, it's a result of something | ||
you've done in the Dart code. | ||
Skia, the graphics library, runs on this thread, which also | ||
handles image I/O. [PENDING: Does it handle image I/O?] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Image I/O is a very nebulous term and I suggest avoiding its use.
ui-performance/index.md
Outdated
Skia, the graphics library, runs on this thread, which also | ||
handles image I/O. [PENDING: Does it handle image I/O?] | ||
|
||
1. I/O thread<br> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel like this whole section section can be summarized as follows:
1: Platform Thread: The platforms main thread. Plugin code runs here. (You may add links to UIKit and Android documentation about what they consider their main thread).
2: UI Thread: Runs your Dart code. Generate the layer tree. Don't block this!
3: GPU Thread: Takes layer tree and displays it by talking to the GPU.
4: IO Thread: Performs expensive tasks (mostly IO) that would otherwise block either the UI or GPU threads.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
When you encounter calls to `saveLayer`, ask yourself these questions: | ||
|
||
* Does the app need this effect? | ||
* Can any of these calls be eliminated? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolved.
ui-performance/index.md
Outdated
can be expensive. Where possible, you want to cache images. | ||
One of the most expensive operations, from a resource perspective, is | ||
rendering a texture using an image file. First, the compressed image is | ||
fetched from persistent storage (disk, for example). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lets not mention a disk. I don't think those have been a thing on a phone :D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
One of the most expensive operations, from a resource perspective, is | ||
rendering a texture using an image file. First, the compressed image is | ||
fetched from persistent storage (disk, for example). | ||
The image is decompressed into device memory (memory on the GPU). The |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Other way around :) Decompressed into host memory and transferred to device memory. Also, its better to say GPU Memory vs RAM instead of "on the".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
In other words, image I/O can be expensive. | ||
The cache provides snapshots of complex hierarchies so they are easier to | ||
render in subsequent frames. | ||
_You want to cache images only where absolutely necessary._ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why? Because raster cache entries are expensive to construct and take up loads of GPU memory.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
loaded onto the device. | ||
</aside> | ||
|
||
### Compile in profile mode |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Run in profile mode
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
|
||
![IntelliJ Flutter Inspector Window](/images/intellij/visual-debugging.png)<br> | ||
|
||
The Flutter Inspector is available in the VS Code, Android Studio, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not available in VSCode - we do have long terms plans to make it so but nothing as of today.
ui-performance/index.md
Outdated
|
||
The Flutter Inspector is available in the VS Code, Android Studio, | ||
and IntelliJ plugins, but its UI may change as it continues to evolve. | ||
The inspector is not currently available from the command line. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is some CLI support for the inspector. Whether we want to explicitly mention it or not is another question. /cc @jacob314
ui-performance/index.md
Outdated
|
||
#### Programmatically | ||
|
||
You can programmatically enable the PerformanceOverlay widget is by |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
strike is
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
|
||
Observatory provides a statement-level single-stepping debugger for Dart and | ||
Flutter applications. It also supports profiling, examining the heap, | ||
and reporting on code coverage. Observatory's _timeline_ view allows you |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would combine these two sentences to just The Observatory supports features like profiling, examining the heap, and displaying code coverage.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
ui-performance/index.md
Outdated
Select **Flutter: Open Observatory Timeline** from the list that pops up. | ||
If this command isn’t available, make sure that the app is running. | ||
{% comment %} | ||
[PENDING: Can you go to the timeline directly? If so, which command?] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/cc @DanTup, we should add an explicit command to link to /#/timeline-dashboard.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have :) That's what Flutter Open Observatory Timeline
in the palette (mentioned here) does? Only appears when you're debugging a Flutter app (same as others).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At least, that's what it's supposed to do. LMK if anyone thinks it's not working right so we can investigate!
ui-performance/index.md
Outdated
|
||
Sometimes a scene results in a layer tree that is easy to construct, | ||
but expensive to render on the GPU thread. When this happens, | ||
the engine graph has no red, but the rasterizer graph shows red. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a meta comment - are engine and rasterizer the best terms here to use for the user? Perhaps UI thread
and GPU thread
(from the list of the 4 threads at the start of the doc)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I totally agree, @devoncarew.
ui-performance/index.md
Outdated
but it can slow your app and should be avoided if you don’t need it. | ||
Even if you don’t call `saveLayer` explicitly, implicit calls may happen | ||
on your behalf. You can check whether your scene is using saveLayer with the | ||
[PerformanceOverlayLayer.checkerboardOffscreenLayers](https://docs.flutter.io/flutter/rendering/PerformanceOverlayLayer/checkerboardOffscreenLayers.html) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chinmaygarde, sounds like this toggle is something we should do a better job of exposing in the tooling?
ui-performance/index.md
Outdated
switch. | ||
|
||
{% comment %} | ||
[PENDING: How to do this, either via UI or programmatically. At this point, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chinmaygarde , same, sounds like this should be exposed through the tooling.
Oops, I commented on #804 instead. I think the observatory timeline usage guide from the other PR would be very useful for Posse as well. Is that section stricken out? |
Yes, @xster, that section is striken out. Since it was written, they've added a customized Flutter timeline view and the tooling engineers felt it was best if we don't document it yet, as it will be rewritten. The doc is definitely less useful without that section. |
NEW staged location: https://sz-flutter-2.firebaseapp.com/ui-performance/ @devoncarew, @chinmaygarde, @xster, are we OK to push this? |
Please change:
then lgtm. |
Got an LGTM from @devoncarew via email. |
Staging URL Generated At https://flutter-io-deploy-three.firebaseapp.com . Please allow Travis Build to finish to view the URL. |
I saw a comment from @xster about the section titled "What’s the point?" which I think may be worth looking at - it does look a bit weird: What’s the point?
The bullets don't seem to match the heading - they're not reasons for doing it? |
@Sfshaza I meant the "What's the point?" heading. It seems like the bulleted list is supposed to answer the question "What's the point?", but doesn't. I think the heading of that list ("What's the point?") is what's confusing rather than the list. |
Thanks, Danny. For now, I'm removing the section. I'd like to add it back
to all level 2 headings, but it will have to be after vacay.
…On Tue, Mar 13, 2018 at 12:19 PM Danny Tuppeny ***@***.***> wrote:
@Sfshaza <https://github.com/sfshaza> I meant the "What's the point?"
heading. It seems like the bulleted list is supposed to answer the question
"What's the point?", but they don't. I think the heading of that list
("What's the point?") is what's confusing rather than the list.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#870 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AGAHwmnaAXj5GqEjoxj-sALBMj36SW-Kks5teBvKgaJpZM4SfNDt>
.
|
* Fix typo in index.md. (flutter#860) * Update flutter-for-react-native.md (flutter#859) * Fix typo (flutter#861) * Update flutter-for-react-native.md (flutter#865) This sentence read: 'In order to make Row' and then proceeded to show how to arrange things in a column. * Fix some more typos (flutter#862) * Update MaterialApp ctor argument mentioned in debugging.md (flutter#863) Previously `debugging.md` mentioned `debugShowGrid` as an argument for `MaterialApp`'s constructor. I believe this came from the `stocks` example as `MaterialApp` has `debugShowMateralGrid` not `debugShowGrid`. * Clarify which devices we do not support (flutter#856) Fixes flutter/flutter#14437 * Update docs.md * Use the more stable beta channel for analysis (flutter#872) This works around flutter/flutter#15293 and flutter/flutter#15301. * Fix a typo in the class description (flutter#876) * Cookbook part4 (flutter#869) * More Recipes for the cookbook on Images, Lists, and Gesture Handling. * Fix Horizontal List complete example * Fix Typo in Long Lists recipe * Next few recipes * Fix indent (flutter#864) * Allow linking directly to specific tool and persist across site (flutter#831) * Allow selection of tab from hash in url * Add selected tool to url during tab changes * Persist selected tool in localStorage to follow around site * Use replaceState to avoid causing history entries if you flip back and forth. Fixes flutter/flutter#14888. * Fixes the explin (flutter#875) * Add hyphens to links in post content (flutter#873) This avoids extending width of post content if links have long words. * Update using-packages.md (flutter#867) * Update using-packages.md Adding word "Or" to clarify running packages get command can be done from IntelliJ or from Terminal * Add a forced newline * Align bridging sidebar titles, and shorten to fit on one line (flutter#855) * Align bridging sidebar titles, and shorten to fit on one line * Align Web devs page title with Android and React native ones * using typo (flutter#879) * Fix typo (flutter#881) * Fixed spelling error in getting-started (flutter#878) * Delete a box design of sentence (flutter#882) A sentence of "... at the following link ..." of "Problems?" of Step 6, it is only surrounded a box design (by div, pre, and code tags). Other steps, it is a normal design sentence. * Fixes the clipping issue on Safari for Flutter for RN section. (flutter#886) * Adds a Flutter for RN md file and a sidebar link * Image link and style fixes * Flutter get-started link updated * Hello world text and preview fixes along with other minor fixes * Hello world code and preview fixes along with other minor fixes * Deletes junk flutter for rn files * Update flutter-for-react-native.md * Fixes the clipping issue on mobile browsers * Add cookbook image demos, fix dismissable link (flutter#880) * Add cookbook image demos, fix dismissable link * Change Dismissable to Dismissible * Jank no more doc (flutter#870) * Stashing * Stashed. * A new version of the jank page. (In process) * New screenshots, and less text about Observatory. * Incorporating Chinmay's feedback. * Tweaking * Tweaking, changing title. * Incorporating feedback. * Tweaking * Tool UI (pics) changed, and incorporating feedback. * Fixing alt text on images. * Incorporating Devon's feedback. * Adding a link to the new performance profiling page. * Incorporating Wm's feedback. * Adding more feedback, and placing the doc in the sidenav. * tweak to the new performance article (flutter#888) * Remove space breaking a markdown link. (flutter#887) The extra space character prevents the link from being clickable. * typo fixes (flutter#890) * Add a few more recipes and two migrations (flutter#884) * [Cookbook] Reading, writing data to key-value (shared preferences) (flutter#877) * Adde key-value section to flutter cookbook * Fixed spelling errors, grammar. Added better example * Fixed grammar, changed you and your to we and our * Fixed text and grammar. * Added 'the' to few places. * Update main.dart (flutter#885) Update to coincide with Update index.md flutter#883 - Added the textDirection property to reflect the API change for text RTL support for text widgets that are not a descendant of MaterialApp. * Update index.md (flutter#883) Added the textDirection property to reflect the API change for text RTL support for text widgets that are not a descendant of MaterialApp. * remove references to deprecated createHttpClient method (flutter#893) * Fix constructor name of `MyStatefulWidget` (flutter#898) * Add missing parameter (flutter#891) * Clarify why Android Studio is needed (flutter#900) * update (flutter#892) * Add new SDK archive page (flutter#901) * Add new SDK archive page * Fix typos * Update tabs to support different types/names This restricts the tab changing to a container but also makes the prefix/storage name dynamic so we don't have to call non-editor tabs editors (eg. OSes). * Add a table of releases to sdk-archive page * Show a failure message when loading fails * Move Master inside tabs * Fix page jumping to top when showing all * Change "Mac OS" to "macOS" The rest of the site is already using macOS. * Don't request archives when we're not rendering them * Remove conversion/sort code No longer required since source data format matches what we converted to. * A few minor typos (flutter#894) * Add cupertino picker to widget catalog (flutter#903) * Replace heart with tile in getting-started (flutter#904) * Add new recipes for fonts, animations, and drawers (flutter#896) * Fix Build (flutter#916) * Make Windows requirments more specific (flutter#917) * Added example to show RESTful JSON POST (flutter#839) * De dupe ide steps (flutter#899) * Remove redundant IDE steps * Remove unused file * Remove one more mentioning of IDE steps * Fix typo (flutter#919) * Update index.md (flutter#914) Delete </aside> closing tag that was left. * Update index.md (flutter#910) Fix duplicate "the the". * Fix website build (flutter#922) * Fix links in "File issue" links page.path is the filename from the repo, page.url is the url of the resulting page. Fixes flutter/flutter#15349. * Update index.md (flutter#924) * Update index.md * Update index.md * Update iOS setup (flutter#918) Reflect Xcode 9.0 requirement given by flutter doctor * Fix networking example (flutter#921) * Update fetch-data.md Rename `json` variable to `_json` * Rename _json to responseJson * Add VS Code to Using-IDE page (flutter#906) * Add tabs and empty VS Code page This is on its own page so it can have a toc (our current kramdown tov plugin appears to not support multiple within one page). * Fix bad IDs for tabs * Support href-based tabs If a tab has a data-tab-href then navigate to it. If no tab is found, bail out and don't hide content (this allows us to skip all the storage/hash fragments for href-based tabs). * Commit all Android Studio content in VS Code page To make it easier to review the changes made, if required. * First cut at VS Code IDE page * Remove ID that link checker doesn't like This does work, but the checker can't verify it :( * Tweaks based on @devoncarew's feedback * Tweaks from review plus fix for rebasing over latest tab changes that require a container around them. * site bar -> Side Bar * Add link to #vscode Also change exclusion in rakefile to be a regex, seems like "#" was being compared as an exact string. * Link "command palette" to VS Code docs * Add docs on sharing assets with the platform * Remove developer.apple.com links from link checking (flutter#928) * Remove developer.apple.com links from link checking To work around flutter/flutter#16268 * Commas for the win * Change installation to use bundles (flutter#912) Change Flutter installation to use pre-built installation packages that can simply be extracted for installation. * Revert previous update of asset section. * Fix Apple.com links (flutter#931) * Add docs on sharing assets with the platform (flutter#929) * Improve the Views section of flutter-for-android (flutter#927) * Improve the Intents section of flutter-for-android (flutter#932) * Improve the Views section of flutter-for-android * Improve Intents section in flutter-for-android * Improve the Async UI section in flutter-for-android (flutter#933) * Improve the Project structure and Resources section in flutter-for-android (flutter#934) * Improve the Async UI section in flutter-for-android * Improve the Project section in flutter-for-android * Update version of http in sample code * adding rake to Gemfile. Rake is used to validate links as described in README's developing step 7 (flutter#930) * Fix typo (flutter#936) Fix minor typos in catalog/samples page * Updating the accessibility info. (flutter#926) * Facebook Login Package (flutter#895) Since the https://pub.dartlang.org/packages/flutter_facebook_connect is no longer maintained, updated it with https://pub.dartlang.org/packages/flutter_facebook_login * Update Learn More link to point to beta 2 post (flutter#943) * Fix code validation issue (flutter#944) Currently failing with `child' is deprecated and shouldn't be used at example/text_input_md_1.dart:31:15 • deprecated_member_use` * Make the formatter happy (flutter#945) Follow-up to flutter#944 * Cookbook: Background processing, Orientation, and Updates (flutter#920) * Update key-value recipe * Add background processing example * Add orientation recipe * Update a few stale FAQ entries (flutter#940)
Previous "jank" branch became very corrupted during the work for Flutter Beta, so I'm starting this new one. In the last couple weeks, there have been changes to the Flutter Inspector, Observatory's timeline view, and the performance overlay UI that have required many updates to this doc. This doc doesn't yet reflect Observatory's new timeline customized for Flutter.
Staged: https://sz-flutter-2.firebaseapp.com/ui-performance/ (NEW location)