Example #1
0
static void close_doc(globals *glo)
{
	int i;

	fz_free(glo->ctx, glo->hit_bbox);
	glo->hit_bbox = NULL;

	for (i = 0; i < NUM_CACHE; i++)
		drop_page_cache(glo, &glo->pages[i]);

	fz_close_document(glo->doc);
	glo->doc = NULL;
}
JNIEXPORT void JNICALL
Java_com_artifex_mupdf_MuPDFCore_destroying(JNIEnv * env, jobject thiz)
{
	int i;

	fz_free(ctx, hit_bbox);
	hit_bbox = NULL;

	for (i = 0; i < NUM_CACHE; i++)
		drop_page_cache(&pages[i]);

	fz_close_document(doc);
	doc = NULL;
}
Example #3
0
int main(int argc, char **argv)
{
	unsigned long st, end, j;
	char *fname;
	unsigned long num_file_blks = FILE_SIZE / BLK_SIZE;
	char cmd[100];
	int fid, r, rnds = 100;
	char buf[BLK_SIZE];

	if (argc >= 2) {
		keep_time = atoi(argv[1]);
		fname = argv[2];
		if (argc == 4) {
			rnds = atoi(argv[3]);
		}
	}	

	drop_page_cache(fname);
	fid = open(fname, O_RDONLY | O_DIRECT); 	

	if (fid == -1) {
		printf("error opening file %s\n", fname);
		perror("open");
		return 1;
	}

	if (keep_time) {
	  st = rdtsc();
	}

	for (r = 0; r < rnds; r++) {
	  for (j = 0; j < num_file_blks; j++) {
	    unsigned long off = j * BLK_SIZE;
	    pread(fid, buf, BLK_SIZE, off);
	  }
	}
	
	if (keep_time) {
	  end = rdtsc();
	  sprintf(cmd, "echo %lu >> res.time", end - st);
	  system(cmd);	
	}

	return 0;
}
Example #4
0
JNIEXPORT void JNICALL
JNI_FN(MuPDF_gotoPageInternal)(JNIEnv *env, jobject thiz, int page)
{
	int i;
	int furthest;
	int furthest_dist = -1;
	float zoom;
	fz_matrix ctm;
	fz_irect bbox;
	page_cache *pc;
	globals *glo = get_globals(env, thiz);
	fz_context *ctx = glo->ctx;

	for (i = 0; i < NUM_CACHE; i++)
	{
		if (glo->pages[i].page != NULL && glo->pages[i].number == page)
		{
			/* The page is already cached */
			glo->current = i;
			return;
		}

		if (glo->pages[i].page == NULL)
		{
			/* cache record unused, and so a good one to use */
			furthest = i;
			furthest_dist = INT_MAX;
		}
		else
		{
			int dist = abs(glo->pages[i].number - page);

			/* Further away - less likely to be needed again */
			if (dist > furthest_dist)
			{
				furthest_dist = dist;
				furthest = i;
			}
		}
	}

	glo->current = furthest;
	pc = &glo->pages[glo->current];

	drop_page_cache(glo, pc);

	/* In the event of an error, ensure we give a non-empty page */
	pc->width = 100;
	pc->height = 100;

	pc->number = page;
	LOGE("Goto page %d...", page);
	fz_try(ctx)
	{
		fz_rect rect;
		LOGI("Load page %d", pc->number);
		pc->page = fz_load_page(glo->doc, pc->number);
		zoom = glo->resolution / 72;
		fz_bound_page(glo->doc, pc->page, &pc->media_box);
		fz_scale(&ctm, zoom, zoom);
		rect = pc->media_box;
		fz_round_rect(&bbox, fz_transform_rect(&rect, &ctm));
		pc->width = bbox.x1-bbox.x0;
		pc->height = bbox.y1-bbox.y0;
	}
	fz_catch(ctx)
	{
		LOGE("cannot make displaylist from page %d", pc->number);
	}
}
JNIEXPORT void JNICALL
Java_com_artifex_mupdf_MuPDFCore_gotoPageInternal(JNIEnv *env, jobject thiz, int page)
{
	int i;
	int furthest;
	int furthest_dist = -1;
	float zoom;
	fz_matrix ctm;
	fz_bbox bbox;
	page_cache *pc;

	for (i = 0; i < NUM_CACHE; i++)
	{
		if (pages[i].page != NULL && pages[i].number == page)
		{
			/* The page is already cached */
			current = i;
			return;
		}

		if (pages[i].page == NULL)
		{
			/* cache record unused, and so a good one to use */
			furthest = i;
			furthest_dist = INT_MAX;
		}
		else
		{
			int dist = abs(pages[i].number - page);

			/* Further away - less likely to be needed again */
			if (dist > furthest_dist)
			{
				furthest_dist = dist;
				furthest = i;
			}
		}
	}

	current = furthest;
	pc = &pages[current];

	drop_page_cache(pc);

	/* In the event of an error, ensure we give a non-empty page */
	pc->width = 100;
	pc->height = 100;

	pc->number = page;
	LOGE("Goto page %d...", page);
	fz_try(ctx)
	{
		LOGI("Load page %d", pc->number);
		pc->page = fz_load_page(doc, pc->number);
		zoom = resolution / 72;
		pc->media_box = fz_bound_page(doc, pc->page);
		ctm = fz_scale(zoom, zoom);
		bbox = fz_round_rect(fz_transform_rect(ctm, pc->media_box));
		pc->width = bbox.x1-bbox.x0;
		pc->height = bbox.y1-bbox.y0;
	}
	fz_catch(ctx)
	{
		LOGE("cannot make displaylist from page %d", pc->number);
	}
}