MCPcopy Create free account
hub / github.com/Tencent/Hippy / TransferLayoutOutputsRecursive

Function TransferLayoutOutputsRecursive

layout/android/jni/FlexNode.cpp:150–237  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

148#endif
149
150static void TransferLayoutOutputsRecursive(HPNodeRef node, void * layoutContext) {
151
152 ASSERT(layoutContext != nullptr);
153 base::android::ScopedJavaLocalRef<jobject> jnode =
154 ((LayoutContext*) layoutContext)->get(node);
155 if (jnode.is_null()) {
156 return;
157 }
158
159 JNIEnv* env = GetJNIEnv();
160 jobject java_node=jnode.obj();
161
162 if (!HPNodeHasNewLayout(node)) {
163#ifdef LAYOUT_TIME_ANALYZE
164// if (weakRef && ( localRef = GetJNIEnv()->NewLocalRef( weakRef) ) !=NULL ) {
165// JNIEnv* env = GetJNIEnv();
166 static jclass clazz = env->FindClass(kFlexNodeClassPath);
167 static jfieldID widthField = env->GetFieldID( clazz, "mWidth", "F");
168 float javaWidth = env->GetFloatField(java_node, widthField );
169//static jfieldID hasNewLayoutField = env->GetFieldID( clazz, "mHasNewLayout", "Z");
170//hasNewLayout = env->GetBooleanField(weakRef ,hasNewLayoutField );
171 if(!isDefined(javaWidth)) {
172 __android_log_print(ANDROID_LOG_ERROR, "HippyLayoutTime", "cache width NAN node's fetchCount %d nodetype %d", node->fetchCount, node->style.nodeType);
173 }
174// GetJNIEnv()->DeleteLocalRef( localRef );
175// }
176#endif
177 return;
178 }
179
180#ifdef LAYOUT_TIME_ANALYZE
181 newLayoutCount++;
182#endif
183 const int MARGIN = 1;
184 const int PADDING = 2;
185 const int BORDER = 4;
186
187 int hasEdgeSetFlag = env->GetIntField(java_node, edgeSetFlagField);
188
189 env->SetFloatField(java_node, widthField, HPNodeLayoutGetWidth(node));
190 env->SetFloatField(java_node, heightField, HPNodeLayoutGetHeight(node));
191 env->SetFloatField(java_node, leftField, HPNodeLayoutGetLeft(node));
192 env->SetFloatField(java_node, topField, HPNodeLayoutGetTop(node));
193
194 if ((hasEdgeSetFlag & MARGIN) == MARGIN) {
195 env->SetFloatField(java_node, marginLeftField,
196 HPNodeLayoutGetMargin(node, CSSDirection::CSSLeft));
197 env->SetFloatField(java_node, marginTopField,
198 HPNodeLayoutGetMargin(node, CSSDirection::CSSTop));
199 env->SetFloatField(java_node, marginRightField,
200 HPNodeLayoutGetMargin(node, CSSDirection::CSSRight));
201 env->SetFloatField(java_node, marginBottomField,
202 HPNodeLayoutGetMargin(node, CSSDirection::CSSBottom));
203 }
204
205 if ((hasEdgeSetFlag & PADDING) == PADDING) {
206 env->SetFloatField(java_node, paddingLeftField,
207 HPNodeLayoutGetPadding(node, CSSDirection::CSSLeft));

Callers 1

Calls 15

GetJNIEnvFunction · 0.85
HPNodeHasNewLayoutFunction · 0.85
HPNodeLayoutGetWidthFunction · 0.85
HPNodeLayoutGetHeightFunction · 0.85
HPNodeLayoutGetLeftFunction · 0.85
HPNodeLayoutGetTopFunction · 0.85
HPNodeLayoutGetMarginFunction · 0.85
HPNodeLayoutGetPaddingFunction · 0.85
HPNodeLayoutGetBorderFunction · 0.85
HPNodesetHasNewLayoutFunction · 0.85
is_nullMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected