-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Optimize log print by using html format
Summary: See #453. Optimizes the node log print by generating some enum text via ```enum.py``` and moving printing to new functions to reduce boilerplate code. Changes the log output to format the nodes in html to be able to copy paste it into browsers for quick debugging. Hides all default values. Closes #479 Reviewed By: gkassabli Differential Revision: D4802184 Pulled By: emilsjolander fbshipit-source-id: 143bd63cbc31fb0755d711062cb4e6a448049ba3
- Loading branch information
1 parent
5112564
commit 586b570
Showing
8 changed files
with
455 additions
and
165 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/** | ||
* Copyright (c) 2014-present, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* LICENSE file in the root directory of this source tree. An additional grant | ||
* of patent rights can be found in the PATENTS file in the same directory. | ||
*/ | ||
|
||
#include <gtest/gtest.h> | ||
#include <yoga/Yoga.h> | ||
#include <stdarg.h> | ||
|
||
namespace { | ||
char writeBuffer[4096]; | ||
int _unmanagedLogger(YGLogLevel level, const char *format, va_list args) { | ||
return vsnprintf(writeBuffer + strlen(writeBuffer), sizeof(writeBuffer) - strlen(writeBuffer), format, args); | ||
} | ||
} | ||
|
||
TEST(YogaTest, logger_default_node_should_print_no_style_info) { | ||
writeBuffer[0] = '\0'; | ||
YGSetLogger(_unmanagedLogger); | ||
const YGNodeRef root = YGNodeNew(); | ||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); | ||
YGNodePrint(root, (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); | ||
YGSetLogger(NULL); | ||
YGNodeFree(root); | ||
|
||
const char * expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>"; | ||
ASSERT_STREQ(expected, writeBuffer); | ||
} | ||
|
||
TEST(YogaTest, logger_node_with_percentage_absolute_position_and_margin) { | ||
writeBuffer[0] = '\0'; | ||
YGSetLogger(_unmanagedLogger); | ||
const YGNodeRef root = YGNodeNew(); | ||
YGNodeStyleSetPositionType(root, YGPositionTypeAbsolute); | ||
YGNodeStyleSetWidthPercent(root, 50); | ||
YGNodeStyleSetHeightPercent(root, 75); | ||
YGNodeStyleSetFlex(root, 1); | ||
YGNodeStyleSetMargin(root, YGEdgeRight, 10); | ||
YGNodeStyleSetMarginAuto(root, YGEdgeLeft); | ||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); | ||
YGNodePrint(root, (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); | ||
YGSetLogger(NULL); | ||
YGNodeFree(root); | ||
|
||
const char * expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"flex: 1; margin-left: auto; margin-right: 10px; width: 50%; height: 75%; position: absolute; \" ></div>"; | ||
ASSERT_STREQ(expected, writeBuffer); | ||
} | ||
|
||
TEST(YogaTest, logger_node_with_children_should_print_indented) { | ||
writeBuffer[0] = '\0'; | ||
YGSetLogger(_unmanagedLogger); | ||
const YGNodeRef root = YGNodeNew(); | ||
const YGNodeRef child0 = YGNodeNew(); | ||
const YGNodeRef child1 = YGNodeNew(); | ||
YGNodeInsertChild(root, child0, 0); | ||
YGNodeInsertChild(root, child1, 1); | ||
YGNodeCalculateLayout(root, YGUnitUndefined, YGUnitUndefined, YGDirectionLTR); | ||
YGNodePrint(root, (YGPrintOptions)(YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); | ||
YGSetLogger(NULL); | ||
YGNodeFreeRecursive(root); | ||
|
||
const char * expected = "<div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" >\n <div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>\n <div layout=\"width: 0; height: 0; top: 0; left: 0;\" style=\"\" ></div>\n</div>"; | ||
ASSERT_STREQ(expected, writeBuffer); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,219 @@ | ||
/** | ||
* Copyright (c) 2014-present, Facebook, Inc. | ||
* All rights reserved. | ||
* | ||
* This source code is licensed under the BSD-style license found in the | ||
* LICENSE file in the root directory of this source tree. An additional grant | ||
* of patent rights can be found in the PATENTS file in the same directory. | ||
*/ | ||
|
||
#include "YGEnums.h" | ||
|
||
const char *YGAlignToString(const YGAlign value){ | ||
switch(value){ | ||
case YGAlignAuto: | ||
return "auto"; | ||
case YGAlignFlexStart: | ||
return "flex-start"; | ||
case YGAlignCenter: | ||
return "center"; | ||
case YGAlignFlexEnd: | ||
return "flex-end"; | ||
case YGAlignStretch: | ||
return "stretch"; | ||
case YGAlignBaseline: | ||
return "baseline"; | ||
case YGAlignSpaceBetween: | ||
return "space-between"; | ||
case YGAlignSpaceAround: | ||
return "space-around"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGDimensionToString(const YGDimension value){ | ||
switch(value){ | ||
case YGDimensionWidth: | ||
return "width"; | ||
case YGDimensionHeight: | ||
return "height"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGDirectionToString(const YGDirection value){ | ||
switch(value){ | ||
case YGDirectionInherit: | ||
return "inherit"; | ||
case YGDirectionLTR: | ||
return "ltr"; | ||
case YGDirectionRTL: | ||
return "rtl"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGDisplayToString(const YGDisplay value){ | ||
switch(value){ | ||
case YGDisplayFlex: | ||
return "flex"; | ||
case YGDisplayNone: | ||
return "none"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGEdgeToString(const YGEdge value){ | ||
switch(value){ | ||
case YGEdgeLeft: | ||
return "left"; | ||
case YGEdgeTop: | ||
return "top"; | ||
case YGEdgeRight: | ||
return "right"; | ||
case YGEdgeBottom: | ||
return "bottom"; | ||
case YGEdgeStart: | ||
return "start"; | ||
case YGEdgeEnd: | ||
return "end"; | ||
case YGEdgeHorizontal: | ||
return "horizontal"; | ||
case YGEdgeVertical: | ||
return "vertical"; | ||
case YGEdgeAll: | ||
return "all"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGExperimentalFeatureToString(const YGExperimentalFeature value){ | ||
switch(value){ | ||
case YGExperimentalFeatureRounding: | ||
return "rounding"; | ||
case YGExperimentalFeatureWebFlexBasis: | ||
return "web-flex-basis"; | ||
case YGExperimentalFeatureMinFlexFix: | ||
return "min-flex-fix"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGFlexDirectionToString(const YGFlexDirection value){ | ||
switch(value){ | ||
case YGFlexDirectionColumn: | ||
return "column"; | ||
case YGFlexDirectionColumnReverse: | ||
return "column-reverse"; | ||
case YGFlexDirectionRow: | ||
return "row"; | ||
case YGFlexDirectionRowReverse: | ||
return "row-reverse"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGJustifyToString(const YGJustify value){ | ||
switch(value){ | ||
case YGJustifyFlexStart: | ||
return "flex-start"; | ||
case YGJustifyCenter: | ||
return "center"; | ||
case YGJustifyFlexEnd: | ||
return "flex-end"; | ||
case YGJustifySpaceBetween: | ||
return "space-between"; | ||
case YGJustifySpaceAround: | ||
return "space-around"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGLogLevelToString(const YGLogLevel value){ | ||
switch(value){ | ||
case YGLogLevelError: | ||
return "error"; | ||
case YGLogLevelWarn: | ||
return "warn"; | ||
case YGLogLevelInfo: | ||
return "info"; | ||
case YGLogLevelDebug: | ||
return "debug"; | ||
case YGLogLevelVerbose: | ||
return "verbose"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGMeasureModeToString(const YGMeasureMode value){ | ||
switch(value){ | ||
case YGMeasureModeUndefined: | ||
return "undefined"; | ||
case YGMeasureModeExactly: | ||
return "exactly"; | ||
case YGMeasureModeAtMost: | ||
return "at-most"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGOverflowToString(const YGOverflow value){ | ||
switch(value){ | ||
case YGOverflowVisible: | ||
return "visible"; | ||
case YGOverflowHidden: | ||
return "hidden"; | ||
case YGOverflowScroll: | ||
return "scroll"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGPositionTypeToString(const YGPositionType value){ | ||
switch(value){ | ||
case YGPositionTypeRelative: | ||
return "relative"; | ||
case YGPositionTypeAbsolute: | ||
return "absolute"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGPrintOptionsToString(const YGPrintOptions value){ | ||
switch(value){ | ||
case YGPrintOptionsLayout: | ||
return "layout"; | ||
case YGPrintOptionsStyle: | ||
return "style"; | ||
case YGPrintOptionsChildren: | ||
return "children"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGUnitToString(const YGUnit value){ | ||
switch(value){ | ||
case YGUnitUndefined: | ||
return "undefined"; | ||
case YGUnitPoint: | ||
return "point"; | ||
case YGUnitPercent: | ||
return "percent"; | ||
case YGUnitAuto: | ||
return "auto"; | ||
} | ||
return "unknown"; | ||
} | ||
|
||
const char *YGWrapToString(const YGWrap value){ | ||
switch(value){ | ||
case YGWrapNoWrap: | ||
return "no-wrap"; | ||
case YGWrapWrap: | ||
return "wrap"; | ||
case YGWrapWrapReverse: | ||
return "wrap-reverse"; | ||
} | ||
return "unknown"; | ||
} | ||
|
Oops, something went wrong.