void process_fragment(FILE *of, char *fragment, int read_size) { char *fp = fragment; unsigned long i = 0, left_mask, right_mask; //Determine the masking coordinates if(strlen(fragment)-1 <= read_size) { output_fragment(of, fragment); return; } left_mask = get_left_mask(fragment, read_size); right_mask = get_right_mask(fragment, read_size); if(left_mask < right_mask) { for(i=0; i <= right_mask; i++) { if(i>=left_mask) { if(*fp != '\n') { *fp = 'N'; } } fp++; } } output_fragment(of, fragment); return; }
PRIVATE void realtime_handler(Generator *g, AEvent *event) { Data *data = g->data; switch (event->kind) { case AE_REALTIME: { SAMPLE *l_buf, *r_buf; int bufbytes = event->d.integer * sizeof(SAMPLE); l_buf = g_alloca(bufbytes); r_buf = g_alloca(bufbytes); if (!gen_read_realtime_input(g, SIG_LEFT, -1, l_buf, event->d.integer)) memset(l_buf, 0, bufbytes); if (!gen_read_realtime_input(g, SIG_RIGHT, -1, r_buf, event->d.integer)) memset(r_buf, 0, bufbytes); if (data->output != NULL) { int written = output_fragment(data->output, l_buf, r_buf, event->d.integer); if (written > 0) data->frames_recorded += written; } break; } default: g_warning("pcm_out module doesn't care for events of kind %d.", event->kind); break; } }
/* recommenderTraversal::visit */ void recommenderTraversal::visit(SgNode *node) { Sg_File_Info *info = NULL; SgFunctionDefinition *function = NULL; SgForStatement *c_loop = NULL; SgNode *grandparent = NULL; SgNode *parent = NULL; int node_found = 0; info = node->get_file_info(); /* Find code fragment for bottlenecks type 'loop' in C */ if ((isSgForStatement(node)) && (info->get_line() == fragment->line) && (PERFEXPERT_HOTSPOT_LOOP == fragment->type)) { /* Found a C loop on the exact line number */ OUTPUT_VERBOSE((8, " [loop] %s (line %d)", _GREEN((char *)"found"), info->get_line())); /* Extract the loop fragment */ if (PERFEXPERT_SUCCESS != output_fragment(node, info, fragment)) { OUTPUT(("%s", _ERROR((char *)"extracting fragment"))); rc = PERFEXPERT_ERROR; return; } /* Save the fragment path and filename */ PERFEXPERT_ALLOC(char, fragment->fragment_file, (strlen(globals.workdir) + strlen(FRAGMENTS_DIR) + strlen(fragment->file) + 15)); sprintf(fragment->fragment_file, "%s/%s/%s_%d", globals.workdir, FRAGMENTS_DIR, fragment->file, fragment->line); /* What is the loop detph and who is parent node */ if (2 <= fragment->depth) { parent = node->get_parent(); /* It is a basic block. Who is this basic block's parent? */ if (NULL != isSgBasicBlock(parent)) { parent = parent->get_parent(); } /* Is it a for/do/while? */ if (isSgForStatement(parent)) { info = parent->get_file_info(); fragment->outer_loop_line = info->get_line(); /* The parent is a loop */ OUTPUT_VERBOSE((8, " [parent loop] %s (line %d)", _GREEN((char *)"found"), fragment->outer_loop_line)); /* Extract the parent loop fragment */ if (PERFEXPERT_SUCCESS != output_fragment(parent, info, fragment)) { OUTPUT(("%s", _ERROR((char *)"extracting fragment"))); rc = PERFEXPERT_ERROR; return; } /* Save the fragment path and filename */ PERFEXPERT_ALLOC(char, fragment->outer_loop_fragment_file, (strlen(globals.workdir) + strlen(FRAGMENTS_DIR) + strlen(fragment->file) + 15)); sprintf(fragment->outer_loop_fragment_file, "%s/%s/%s_%d", globals.workdir, FRAGMENTS_DIR, fragment->file, fragment->outer_loop_line); /* What is the loop detph and who is the grandparent node */ if (3 <= fragment->depth) { grandparent = parent->get_parent(); /* It is a basic block. Who is this basic block's parent? */ if (NULL != isSgBasicBlock(grandparent)) { grandparent = grandparent->get_parent(); } /* Is it a for/do/while? */ if (isSgForStatement(grandparent)) { info = grandparent->get_file_info(); fragment->outer_outer_loop_line = info->get_line(); /* The grandparent is a loop */ OUTPUT_VERBOSE((8, " [grandparent loop] %s (line %d)", _GREEN((char *)"found"), fragment->outer_outer_loop_line)); /* Extract the parent loop fragment */ if (PERFEXPERT_SUCCESS != output_fragment(grandparent, info, fragment)) { OUTPUT(("%s", _ERROR((char *)"extracting fragment"))); rc = PERFEXPERT_ERROR; return; } /* Save the fragment path and filename */ PERFEXPERT_ALLOC(char, fragment->outer_outer_loop_fragment_file, (strlen(globals.workdir) + strlen(FRAGMENTS_DIR) + strlen(fragment->file) + 15)); sprintf(fragment->outer_outer_loop_fragment_file, "%s/%s/%s_%d", globals.workdir, FRAGMENTS_DIR, fragment->file, fragment->outer_outer_loop_line); } } }