@@ -157,14 +157,25 @@ kshark_data_collection_alloc(struct kshark_context *kshark_ctx,
* number of margin entries requested, keep adding
* until you fill the margin.
*/
- if (i + margin < j)
- i = j;
- else
- i += margin;
-
- last_added = i;
- collection_add_entry(&temp, i, COLLECTION_BREAK);
- ++break_count;
+ if (i + margin >= j) {
+ for (;j < i + margin; ++j) {
+ if (cond(kshark_ctx, data[j], val)) {
+ /*
+ * Good data has been found.
+ * Continue extending the
+ * previous data interval.
+ */
+ good_data = true;
+ break;
+ }
+ }
+ }
+
+ last_added = i = j;
+ if (!good_data) {
+ collection_add_entry(&temp, i, COLLECTION_BREAK);
+ ++break_count;
+ }
}
}
The margin data added at the end of the data interval of the collection may actually include the beginning of another interval. Because of this we have to iterate over the margin data and check for "good" entries. In the case of a "good" entry being found, we have to continue extending the last interval. Signed-off-by: Yordan Karadzhov <ykaradzhov@vmware.com> --- kernel-shark-qt/src/libkshark-collection.c | 27 +++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-)