mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
ea8a57116f
Summary: Previously we computed the list of nodes that need to be notified about layout changes using a list of mutation instructions. That was fine, but that's not really compatible with some other changes that I plan to make, so I decided to change it (make it better). Besides the better design (debatable; fewer dependencies to unrelated moving pieces), here is why I believe the new way is more performant: * The new approach has no `dynamic_casts`, whereas the previous has tons of them (two per a mutation). If a `dynamic_cast` takes 10 ns, for 500 nodes it can take up to 5ms only for casts. (Non-scientific assumption.) * After removing dependency to mutation instruction, we can enable flattening for views which have `onLayout` event. Reviewed By: mdvacca Differential Revision: D15110725 fbshipit-source-id: 31a657ccfd02441734ad1d71a833653223163289
48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include <react/core/LayoutableShadowNode.h>
|
|
#include <react/graphics/Geometry.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
/*
|
|
* LayoutContext: Additional contextual information useful for particular
|
|
* layout approaches.
|
|
*/
|
|
struct LayoutContext {
|
|
/*
|
|
* Compound absolute position of the node relative to the root node.
|
|
*/
|
|
Point absolutePosition{0, 0};
|
|
|
|
/*
|
|
* Reflects the scale factor needed to convert from the logical coordinate
|
|
* space into the device coordinate space of the physical screen.
|
|
* Some layout systems *might* use this to round layout metric values
|
|
* to `pixel value`.
|
|
*/
|
|
Float pointScaleFactor{1.0};
|
|
|
|
/*
|
|
* A raw pointer to list of raw pointers to `LayoutableShadowNode`s that were
|
|
* affected by the re-layout pass. If the field is not `nullptr`, a particular
|
|
* `LayoutableShadowNode` implementation should add mutated nodes to this
|
|
* list. The order is not specified. Nothing in this collection is owing (on
|
|
* purpose), make sure the memory is managed responsibly.
|
|
*/
|
|
std::vector<LayoutableShadowNode const *> *affectedNodes{};
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|