| Summary: | Plugins have no common debug infrastructure so tuning the output level is hard | ||
|---|---|---|---|
| Product: | Telepathy | Reporter: | Vivek Dasmohapatra <vivek> |
| Component: | mission-control | Assignee: | Vivek Dasmohapatra <vivek> |
| Status: | RESOLVED FIXED | QA Contact: | Telepathy bugs list <telepathy-bugs> |
| Severity: | enhancement | ||
| Priority: | medium | Keywords: | patch |
| Version: | git master | ||
| Hardware: | Other | ||
| OS: | All | ||
| URL: | http://cgit.collabora.com/git/user/vivek/telepathy-mission-control/log/?h=debug-cleanups | ||
| Whiteboard: | NB#239794, r+ with trivia | ||
| i915 platform: | i915 features: | ||
|
Description
Vivek Dasmohapatra
2011-05-30 03:36:01 UTC
+typedef enum {
+ MCP_DEBUG_NONE = 0,
+ MCP_DEBUG_ACCOUNT = 1 << 0,
+ MCP_DEBUG_ACCOUNT_STORAGE = 1 << 1,
+ MCP_DEBUG_DBUS_ACL = 1 << 2,
+ MCP_DEBUG_DISPATCH_OPERATION = 1 << 3,
+ MCP_DEBUG_DISPATCH_OPERATION_POLICY = 1 << 4,
+ MCP_DEBUG_LOADER = 1 << 5,
+ MCP_DEBUG_REQUEST = 1 << 6,
+ MCP_DEBUG_REQUEST_POLICY = 1 << 7,
+} McpDebugType;
+
+gboolean mcp_debugging (McpDebugType type);
I'd prefer mcp_is_debugging() and McpDebugFlags.
This takes an implementation detail (the set of debug domains) and makes it API - be careful with that sort of thing.
> #define DEBUG(format, ...) \
> - _mcp_debug ("%s: " format, G_STRFUNC, ##__VA_ARGS__)
> + if (mcp_debugging (MCP_DEBUG_TYPE)) \
> + g_debug ("%s: " format, G_STRLOC, ##__VA_ARGS__)
All function-like macros that expand to more than one statement should have their body wrapped in G_STMT_START { ... } G_STMT_END to avoid astonishing precedence. (If in doubt, copy from telepathy-glib...)
> +++ b/mission-control-plugins/debug.h
> +#ifdef ENABLE_DEBUG
Not in a public header, please. Public headers should never rely on anything from config.h, because anyone could #include them (not just MC itself).
In-tree plugins should get their MCP_DEBUG() (or just DEBUG() - up to you, because it shouldn't be public API anyway, for this reason) from an in-tree-only header like "mission-control-plugins/debug-internal.h".
Out-of-tree plugins should have their own debug-internal.h (per project) that does its own #ifdef, which depends whether the project providing the plugin has been compiled with debug enabled.
Rule of thumb: none of the observable functionality of a library should depend on its configure options, and its API certainly shouldn't "change shape". (It'd be OK if mcp_is_debugging() always returned FALSE if compiled without debugging, or if mcp_debug() did nothing if compiled without debugging, or something.)
> Squash a recent compiler warning
> + {
This commit shouldn't have been needed. Use G_STMT_START properly and it can be removed.
> Call g_key_file_remove... rather than ...set_value when new value is NULL
> Don't call tp_intset_size on unset intset
r+ for these, please cherry-pick them.
(In reply to comment #1) > This takes an implementation detail (the set of debug domains) and makes it API > - be careful with that sort of thing. Updated. I figured that all I was exposing here was one flag value for each plugin interface (and of course the plugin interfaces have to be exposed to the user or they can't implement them...) I think I got all the other r- comments. r- removed since it's up for re-review. > plugin debug header should be included via the main plugin header If this is your intention, please make including it directly just fail. > +#include <mission-control-plugins/mission-control-plugins.h> > +#include <mission-control-plugins/debug.h> > +#include <config.h> config.h should always come first, and debug.h is now redundant. Neither of those is critical. Amended as per final comment and merged. 2375 % git tag --contains=0cfe51094842 telepathy-mission-control-5.8.0 telepathy-mission-control-5.9.1 |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.