| 148 | #endif |
| 149 | |
| 150 | static 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)); |
no test coverage detected